TeTopology core and nbi bug fixes and improvements

Change-Id: I5f3dbcaa79b04c1b1b00b9df7ccae804953c3bae
This commit is contained in:
Yixiao Chen 2017-01-13 10:17:03 -05:00 committed by Aihua Guo
parent 90163bab47
commit 265b3bbdf9
15 changed files with 671 additions and 629 deletions

View File

@ -146,4 +146,4 @@ public final class EnumConverter {
} }
} }
} }

View File

@ -15,7 +15,14 @@
*/ */
package org.onosproject.teyang.utils.topology; 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.onlab.packet.Ip4Address;
import org.onosproject.tetopology.management.api.KeyId; import org.onosproject.tetopology.management.api.KeyId;
import org.onosproject.tetopology.management.api.TeStatus; 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.CommonLinkData;
import org.onosproject.tetopology.management.api.link.DefaultNetworkLink; import org.onosproject.tetopology.management.api.link.DefaultNetworkLink;
import org.onosproject.tetopology.management.api.link.DefaultTeLink; 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.ExternalLink;
import org.onosproject.tetopology.management.api.link.LinkBandwidth; import org.onosproject.tetopology.management.api.link.LinkBandwidth;
import org.onosproject.tetopology.management.api.link.NetworkLink; 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.NetworkLinkKey;
import org.onosproject.tetopology.management.api.link.PathElement; import org.onosproject.tetopology.management.api.link.PathElement;
import org.onosproject.tetopology.management.api.link.TeLink; 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.TeLinkTpGlobalKey;
import org.onosproject.tetopology.management.api.link.TeLinkTpKey; import org.onosproject.tetopology.management.api.link.TeLinkTpKey;
import org.onosproject.tetopology.management.api.link.TePathAttributes; 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.NodeTpKey;
import org.onosproject.tetopology.management.api.node.TeNode; import org.onosproject.tetopology.management.api.node.TeNode;
import org.onosproject.tetopology.management.api.node.TerminationPointKey; 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.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.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.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;
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;
.Node; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology .ietfnetworktopology.LinkId;
.LinkId; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology .ietfnetworktopology.TpId;
.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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
.networks.network.AugmentedNdNetwork; .ietfnetworktopology.networks.network.augmentedndnetwork.DefaultLink;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
.networks.network.augmentedndnetwork.DefaultLink; .ietfnetworktopology.networks.network.augmentedndnetwork.DefaultLink.LinkBuilder;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
.networks.network.augmentedndnetwork.DefaultLink.LinkBuilder; .ietfnetworktopology.networks.network.augmentedndnetwork.Link;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
.networks.network.augmentedndnetwork.Link; .ietfnetworktopology.networks.network.augmentedndnetwork.link.DefaultDestination;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
.networks.network.augmentedndnetwork.link.DefaultDestination; .ietfnetworktopology.networks.network.augmentedndnetwork.link.DefaultSource;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
.networks.network.augmentedndnetwork.link.DefaultSource; .ietfnetworktopology.networks.network.augmentedndnetwork.link.DefaultSupportingLink;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
.networks.network.augmentedndnetwork.link.DefaultSupportingLink; .ietfnetworktopology.networks.network.augmentedndnetwork.link.Destination
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology .DestinationBuilder;
.networks.network.augmentedndnetwork.link.Destination.DestinationBuilder; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology .ietfnetworktopology.networks.network.augmentedndnetwork.link.Source.SourceBuilder;
.networks.network.augmentedndnetwork.link.Source.SourceBuilder; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology .ietfnetworktopology.networks.network.augmentedndnetwork.link.SupportingLink;
.networks.network.augmentedndnetwork.link.SupportingLink; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology .ietfnetworktopology.networks.network.augmentedndnetwork.link.SupportingLink
.networks.network.augmentedndnetwork.link.SupportingLink.SupportingLinkBuilder; .SupportingLinkBuilder;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology.networks.network.node.AugmentedNdNode;
.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
.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.TeLinkEvent;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.DefaultInformationSourceState;
.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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.informationsourcestate.DefaultTopology;
.informationsourceattributes.InformationSourceState; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks.network.AugmentedNwNetwork;
.informationsourceattributes.informationsourcestate.DefaultTopology; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology .ietftetopology.networks.network.link.AugmentedNtLink;
.informationsourceattributes.informationsourcestate.Topology; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks .ietftetopology.networks.network.link.DefaultAugmentedNtLink;
.network.AugmentedNwNetwork; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks .ietftetopology.networks.network.link.DefaultAugmentedNtLink.AugmentedNtLinkBuilder;
.network.link.AugmentedNtLink; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks.network.node.terminationpoint.AugmentedNtTerminationPoint;
.network.link.DefaultAugmentedNtLink; 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.networks import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.DefaultTe.TeBuilder;
.network.link.DefaultAugmentedNtLink.AugmentedNtLinkBuilder; 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.networks import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.DefaultConfig;
.network.node.AugmentedNwNode; 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.networks import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.DefaultState;
.network.node.terminationpoint.AugmentedNtTerminationPoint; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkaugment.te.State;
.telinkaugment.DefaultTe; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.DefaultTeLinkAttributes.TeLinkAttributesBuilder;
.telinkaugment.DefaultTe.TeBuilder; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.DefaultExternalDomain;
.telinkaugment.te.Config; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.DefaultUnderlay;
.telinkaugment.te.DefaultConfig; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconfigattributes.telinkattributes.ExternalDomain;
.telinkaugment.te.DefaultConfig.ConfigBuilder; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.DefaultTeSrlgs.TeSrlgsBuilder;
.telinkaugment.te.DefaultState; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.DefaultUnreservedBandwidth.UnreservedBandwidthBuilder;
.telinkaugment.te.DefaultState.StateBuilder; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkconnectivityattributes.UnreservedBandwidth;
.telinkaugment.te.State; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.DefaultUnderlayBackupPath;
.telinkconfigattributes.DefaultTeLinkAttributes; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.DefaultUnderlayPrimaryPath;
.telinkconfigattributes.DefaultTeLinkAttributes.TeLinkAttributesBuilder; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.telinkunderlayattributes.UnderlayPrimaryPath;
.telinkconfigattributes.TeLinkAttributes; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.Te;
.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.types.rev20160705.ietftetypes.Srlg; 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.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.TeOperStatus;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeTopologyEventType;
.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.TeTpId;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.explicitroutesubobject.type.DefaultUnnumberedLink;
.tetopologyeventtype.TeTopologyEventTypeEnum; 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 java.math.BigDecimal; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.tetopologyeventtype.TeTopologyEventTypeEnum;
import java.math.BigInteger;
import java.util.BitSet;
import java.util.List;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.common.collect.Lists;
/** /**
* The conversion functions. * The conversion functions.
@ -194,30 +162,29 @@ public final class LinkConverter {
private static LinkProtectionTypeEnum teSubsystem2YangLinkProtectionType(TunnelProtectionType linkProtectionType) { private static LinkProtectionTypeEnum teSubsystem2YangLinkProtectionType(TunnelProtectionType linkProtectionType) {
switch (linkProtectionType) { switch (linkProtectionType) {
case ENHANCED: case ENHANCED:
return LinkProtectionTypeEnum.ENHANCED; return LinkProtectionTypeEnum.ENHANCED;
case EXTRA_TRAFFIC: case EXTRA_TRAFFIC:
return LinkProtectionTypeEnum.EXTRA_TRAFFIC; return LinkProtectionTypeEnum.EXTRA_TRAFFIC;
case SHARED: case SHARED:
return LinkProtectionTypeEnum.SHARED; return LinkProtectionTypeEnum.SHARED;
case UNPROTECTED: case UNPROTECTED:
return LinkProtectionTypeEnum.UNPROTECTED; return LinkProtectionTypeEnum.UNPROTECTED;
case ONE_FOR_ONE: case ONE_FOR_ONE:
return LinkProtectionTypeEnum.YANGAUTOPREFIX1_FOR_1; return LinkProtectionTypeEnum.YANGAUTOPREFIX1_FOR_1;
case ONE_PLUS_ONE: case ONE_PLUS_ONE:
return LinkProtectionTypeEnum.YANGAUTOPREFIX1_PLUS_1; return LinkProtectionTypeEnum.YANGAUTOPREFIX1_PLUS_1;
default: default:
return null; return null;
} }
} }
/** /**
* TE Link Config object conversion from TE Topology subsystem to YANG. * TE Link Config object conversion from TE Topology subsystem to YANG.
* *
* @param teLink TE link object * @param teLink TE link object
* @return TE Link Config YANG 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); checkNotNull(teLink, E_NULL_TELINK_DATA);
TeLinkAttributesBuilder attrBuilder = DefaultTeLinkAttributes.builder(); TeLinkAttributesBuilder attrBuilder = DefaultTeLinkAttributes.builder();
@ -234,7 +201,7 @@ public final class LinkConverter {
if (teLink.tunnelProtectionType() != null) { if (teLink.tunnelProtectionType() != null) {
attrBuilder = attrBuilder attrBuilder = attrBuilder
.linkProtectionType(teSubsystem2YangLinkProtectionType(teLink .linkProtectionType(teSubsystem2YangLinkProtectionType(teLink
.tunnelProtectionType())); .tunnelProtectionType()));
} }
attrBuilder = attrBuilder.teDefaultMetric(teLink.cost()); attrBuilder = attrBuilder.teDefaultMetric(teLink.cost());
@ -257,27 +224,25 @@ public final class LinkConverter {
if (teLink.externalLink().externalLinkKey() != null) { if (teLink.externalLink().externalLinkKey() != null) {
edBuilder = edBuilder edBuilder = edBuilder
.remoteTeLinkTpId(TeTpId.fromString( .remoteTeLinkTpId(TeTpId.fromString(
String.valueOf(teLink String.valueOf(teLink
.externalLink() .externalLink()
.externalLinkKey() .externalLinkKey()
.teLinkTpId()))) .teLinkTpId())))
.remoteTeNodeId(TeNodeId.fromString( .remoteTeNodeId(TeNodeId.fromString(
String.valueOf(teLink String.valueOf(teLink
.externalLink() .externalLink()
.externalLinkKey() .externalLinkKey()
.teNodeId()))); .teNodeId())));
} }
attrBuilder = attrBuilder.externalDomain(edBuilder.build()); attrBuilder = attrBuilder.externalDomain(edBuilder.build());
} }
if (teLink.availBandwidth() != null) { if (teLink.availBandwidth() != null) {
short i = 0; for (short i = 0; i < teLink.availBandwidth().length; i++) {
for (float f : teLink.availBandwidth()) {
UnreservedBandwidthBuilder urBuilder = UnreservedBandwidthBuilder urBuilder =
DefaultUnreservedBandwidth.builder() DefaultUnreservedBandwidth.builder()
.bandwidth(BigDecimal.valueOf(f)) .bandwidth(BigDecimal.valueOf(teLink.availBandwidth()[i]))
.priority(i); .priority(i);
i++;
attrBuilder = attrBuilder.addToUnreservedBandwidth(urBuilder.build()); attrBuilder = attrBuilder.addToUnreservedBandwidth(urBuilder.build());
} }
} }
@ -291,23 +256,27 @@ public final class LinkConverter {
// attrBuilder = attrBuilder.maxResvLinkBandwidth(teLink.maxResvLinkBandwidth()); // attrBuilder = attrBuilder.maxResvLinkBandwidth(teLink.maxResvLinkBandwidth());
// } // }
// UnderlayBuilder builder = DefaultUnderlay.builder(); if (teLink.primaryPath() != null || teLink.backupPaths() != null) {
// if (teLink.primaryPath() != null) { UnderlayBuilder builder = DefaultUnderlay.builder();
// if (teLink.primaryPath() != null) {
// // TODO: what is underlayProtectionType in tePath? // TODO: what is underlayProtectionType in tePath?
// // builder = builder.underlayProtectionType(tePath.protectionType()); // builder =
// // builder.underlayProtectionType(tePath.protectionType());
// builder = te2YangConfigUnderlayPrimaryPath(builder, teLink); builder = te2YangConfigUnderlayPrimaryPath(builder, teLink,
// } teTopologyService);
// }
// if (teLink.backupPaths() != null) {
// builder = te2YangConfigUnderlayBackupPaths(builder, teLink); if (teLink.backupPaths() != null) {
// } builder = te2YangConfigUnderlayBackupPaths(builder, teLink,
// teTopologyService);
// attrBuilder = attrBuilder.underlay(builder.build()); }
attrBuilder = attrBuilder.underlay(builder.build());
}
ConfigBuilder yangConfigBuilder = DefaultConfig.builder() ConfigBuilder yangConfigBuilder = DefaultConfig.builder()
.teLinkAttributes(attrBuilder.build()); .teLinkAttributes(attrBuilder.build());
return yangConfigBuilder.build(); return yangConfigBuilder.build();
} }
@ -319,11 +288,11 @@ public final class LinkConverter {
*/ */
private static State teLink2YangState(TeLink teLink) { private static State teLink2YangState(TeLink teLink) {
TeLinkAttributes TeLinkAttributes
.TeLinkAttributesBuilder attrBuilder = .TeLinkAttributesBuilder attrBuilder =
DefaultTeLinkAttributes DefaultTeLinkAttributes
.builder() .builder()
.teDefaultMetric(teLink.cost()) .teDefaultMetric(teLink.cost())
.isAbstract(teLink.flags().get(TeLink.BIT_ABSTRACT)); .isAbstract(teLink.flags().get(TeLink.BIT_ABSTRACT));
if (teLink.teLinkKey() != null) { if (teLink.teLinkKey() != null) {
// what is link index? for now I used teLinkTpId // what is link index? for now I used teLinkTpId
attrBuilder = attrBuilder.linkIndex(BigInteger.valueOf(teLink.teLinkKey().teLinkTpId())); attrBuilder = attrBuilder.linkIndex(BigInteger.valueOf(teLink.teLinkKey().teLinkTpId()));
@ -335,7 +304,7 @@ public final class LinkConverter {
if (teLink.tunnelProtectionType() != null) { if (teLink.tunnelProtectionType() != null) {
attrBuilder = attrBuilder attrBuilder = attrBuilder
.linkProtectionType(teSubsystem2YangLinkProtectionType(teLink .linkProtectionType(teSubsystem2YangLinkProtectionType(teLink
.tunnelProtectionType())); .tunnelProtectionType()));
} }
if (teLink.maxBandwidth() != null) { if (teLink.maxBandwidth() != null) {
// maxBandwidth is an array of float[], but in yang is just a big decimal // 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) { if (teLink.externalLink().externalLinkKey() != null) {
edBuilder = edBuilder edBuilder = edBuilder
.remoteTeLinkTpId(TeTpId.fromString(String.valueOf(teLink .remoteTeLinkTpId(TeTpId.fromString(String.valueOf(teLink
.externalLink() .externalLink()
.externalLinkKey() .externalLinkKey()
.teLinkTpId()))) .teLinkTpId())))
.remoteTeNodeId(TeNodeId.fromString(String.valueOf(teLink .remoteTeNodeId(TeNodeId.fromString(String.valueOf(teLink
.externalLink() .externalLink()
.externalLinkKey() .externalLinkKey()
.teNodeId()))); .teNodeId())));
} }
attrBuilder = attrBuilder.externalDomain(edBuilder.build()); attrBuilder = attrBuilder.externalDomain(edBuilder.build());
@ -377,19 +346,17 @@ public final class LinkConverter {
short i = 0; short i = 0;
for (float f : teLink.availBandwidth()) { for (float f : teLink.availBandwidth()) {
UnreservedBandwidth.UnreservedBandwidthBuilder urBuilder = DefaultUnreservedBandwidth UnreservedBandwidth.UnreservedBandwidthBuilder urBuilder = DefaultUnreservedBandwidth
.builder() .builder().bandwidth(BigDecimal.valueOf(f)).priority(i);
.bandwidth(BigDecimal.valueOf(f))
.priority(i);
i++; i++;
attrBuilder = attrBuilder.addToUnreservedBandwidth(urBuilder.build()); attrBuilder = attrBuilder.addToUnreservedBandwidth(urBuilder.build());
} }
} }
StateBuilder yangStateBuilder = DefaultState.builder() StateBuilder yangStateBuilder = DefaultState.builder()
.teLinkAttributes(attrBuilder.build()); .teLinkAttributes(attrBuilder.build());
if (teLink.opStatus() != null) { if (teLink.opStatus() != null) {
yangStateBuilder = yangStateBuilder.operStatus(EnumConverter yangStateBuilder = yangStateBuilder.operStatus(EnumConverter
.teSubsystem2YangOperStatus(teLink.opStatus())); .teSubsystem2YangOperStatus(teLink.opStatus()));
} }
if (teLink.sourceTeLinkId() != null) { if (teLink.sourceTeLinkId() != null) {
@ -397,8 +364,8 @@ public final class LinkConverter {
Topology.TopologyBuilder topologyBuilder = DefaultTopology.builder(); Topology.TopologyBuilder topologyBuilder = DefaultTopology.builder();
topologyBuilder = topologyBuilder.clientIdRef(teLink.sourceTeLinkId().clientId()) topologyBuilder = topologyBuilder.clientIdRef(teLink.sourceTeLinkId().clientId())
.providerIdRef(teLink.sourceTeLinkId().providerId()) .providerIdRef(teLink.sourceTeLinkId().providerId())
.teTopologyIdRef(teLink.sourceTeLinkId().topologyId()); .teTopologyIdRef(teLink.sourceTeLinkId().topologyId());
issBuilder = issBuilder.topology(topologyBuilder.build()); issBuilder = issBuilder.topology(topologyBuilder.build());
yangStateBuilder.informationSourceState(issBuilder.build()); yangStateBuilder.informationSourceState(issBuilder.build());
} }
@ -407,7 +374,7 @@ public final class LinkConverter {
// object model, set the value properly // object model, set the value properly
// stateDerivedUnderlay = org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology // stateDerivedUnderlay = org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology
// .rev20160708.ietftetopology.telinkstatederived.Underlay // .rev20160708.ietftetopology.telinkstatederived.Underlay
// yangStateBuilder = yangStateBuilder.underlay(stateDerivedUnderlay); //yangStateBuilder = yangStateBuilder.underlay(stateDerivedUnderlay);
return yangStateBuilder.build(); return yangStateBuilder.build();
} }
@ -416,10 +383,12 @@ public final class LinkConverter {
* Link object conversion from TE Topology subsystem to YANG. * Link object conversion from TE Topology subsystem to YANG.
* *
* @param teSubsNetworkLink TE subsystem link object * @param teSubsNetworkLink TE subsystem link object
* @param teTopologyService teTopology core service
* @return YANG link object * @return YANG link object
*/ */
public static Link teSubsystem2YangLink( 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); checkNotNull(teSubsNetworkLink, E_NULL_TELINK);
LinkId linkId = LinkId.fromString(teSubsNetworkLink.linkId().toString()); LinkId linkId = LinkId.fromString(teSubsNetworkLink.linkId().toString());
@ -429,43 +398,43 @@ public final class LinkConverter {
SupportingLinkBuilder spLinkBuilder = DefaultSupportingLink.builder(); SupportingLinkBuilder spLinkBuilder = DefaultSupportingLink.builder();
for (NetworkLinkKey linkKey : teSubsNetworkLink.supportingLinkIds()) { for (NetworkLinkKey linkKey : teSubsNetworkLink.supportingLinkIds()) {
slinks.add(spLinkBuilder.networkRef(NetworkId.fromString( slinks.add(spLinkBuilder.networkRef(NetworkId.fromString(
linkKey.networkId().toString())) linkKey.networkId().toString()))
.linkRef(LinkId.fromString( .linkRef(LinkId.fromString(
linkKey.linkId().toString())) linkKey.linkId().toString()))
.build()); .build());
} }
builder = builder.supportingLink(slinks); builder = builder.supportingLink(slinks);
} }
if (teSubsNetworkLink.source() != null) { if (teSubsNetworkLink.source() != null) {
SourceBuilder sourceBuilder = DefaultSource SourceBuilder sourceBuilder = DefaultSource
.builder() .builder()
.sourceNode(NodeId.fromString( .sourceNode(NodeId.fromString(
teSubsNetworkLink.source().nodeId().toString())) teSubsNetworkLink.source().nodeId().toString()))
.sourceTp(TpId.fromString( .sourceTp(TpId.fromString(
teSubsNetworkLink.source().tpId().toString())); teSubsNetworkLink.source().tpId().toString()));
builder = builder.source(sourceBuilder.build()); builder = builder.source(sourceBuilder.build());
} }
if (teSubsNetworkLink.destination() != null) { if (teSubsNetworkLink.destination() != null) {
DestinationBuilder destBuilder = DefaultDestination DestinationBuilder destBuilder = DefaultDestination
.builder() .builder()
.destNode(NodeId.fromString( .destNode(NodeId.fromString(
teSubsNetworkLink.destination().nodeId().toString())) teSubsNetworkLink.destination().nodeId().toString()))
.destTp(TpId.fromString( .destTp(TpId.fromString(
teSubsNetworkLink.destination().tpId().toString())); teSubsNetworkLink.destination().tpId().toString()));
builder = builder.destination(destBuilder.build()); builder = builder.destination(destBuilder.build());
} }
if (teSubsNetworkLink.teLink() != null) { if (teSubsNetworkLink.teLink() != null) {
TeLink teData = teSubsNetworkLink.teLink(); TeLink teData = teSubsNetworkLink.teLink();
TeBuilder yangTeBuilder = DefaultTe.builder() TeBuilder yangTeBuilder = DefaultTe.builder()
.config(teLink2YangConfig(teData)) .config(teLink2YangConfig(teData, teTopologyService))
.state(teLink2YangState(teData)); .state(teLink2YangState(teData));
// ignoring supportingTeLinkId when converting from core to yang? // ignoring supportingTeLinkId when converting from core to yang?
// if (teData.supportingTeLinkId() != null) { // if (teData.supportingTeLinkId() != null) {
// } // }
AugmentedNtLinkBuilder linkAugmentBuilder = AugmentedNtLinkBuilder linkAugmentBuilder =
DefaultAugmentedNtLink.builder() DefaultAugmentedNtLink.builder()
.te(yangTeBuilder.build()); .te(yangTeBuilder.build());
builder.addYangAugmentedInfo(linkAugmentBuilder.build(), AugmentedNtLink.class); builder.addYangAugmentedInfo(linkAugmentBuilder.build(), AugmentedNtLink.class);
} }
@ -479,24 +448,30 @@ public final class LinkConverter {
org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath tePath = teLink.primaryPath(); org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath tePath = teLink.primaryPath();
UnderlayPrimaryPathBuilder pathBuilder = UnderlayPrimaryPathBuilder pathBuilder =
DefaultUnderlayPrimaryPath.builder(); DefaultUnderlayPrimaryPath.builder();
if (tePath.pathElements() != null) { if (tePath.pathElements() != null) {
for (PathElement pathElementTe : tePath.pathElements()) { for (PathElement pathElementTe : tePath.pathElements()) {
org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
.ietftetopology.telinkunderlayattributes.underlayprimarypath.PathElement .ietftetopology.telinkunderlayattributes.underlayprimarypath.PathElement
.PathElementBuilder pathElementYangBuilder = DefaultPathElement.builder(); .PathElementBuilder pathElementYangBuilder = DefaultPathElement.builder();
pathElementYangBuilder = pathElementYangBuilder.pathElementId(pathElementTe.pathElementId()); pathElementYangBuilder = pathElementYangBuilder.pathElementId(pathElementTe.pathElementId());
//TODO: add some Type cross converter //TODO: check more types here
// pathElementYangBuilder = pathElementYangBuilder.type(Type pathElementTe.type()) 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.addToPathElement(pathElementYangBuilder.build());
} }
} }
pathBuilder = pathBuilder.clientIdRef(teLink.underlayTeTopologyId().clientId()) pathBuilder = pathBuilder.clientIdRef(teLink.underlayTeTopologyId().clientId())
.providerIdRef(teLink.underlayTeTopologyId().providerId()) .providerIdRef(teLink.underlayTeTopologyId().providerId())
.teTopologyIdRef(teLink.underlayTeTopologyId().topologyId()); .teTopologyIdRef(teLink.underlayTeTopologyId().topologyId());
pathBuilder = pathBuilder.networkIdRef(teTopologyService.networkId(teLink.underlayTeTopologyId())); pathBuilder = pathBuilder.networkIdRef(teTopologyService.networkId(teLink.underlayTeTopologyId()));
@ -513,22 +488,28 @@ public final class LinkConverter {
.builder(); .builder();
pathBuilder = pathBuilder.index(tePath.index()); pathBuilder = pathBuilder.index(tePath.index());
pathBuilder = pathBuilder.clientIdRef(teLink.underlayTeTopologyId().clientId()) pathBuilder = pathBuilder.clientIdRef(teLink.underlayTeTopologyId().clientId())
.providerIdRef(teLink.underlayTeTopologyId().providerId()) .providerIdRef(teLink.underlayTeTopologyId().providerId())
.teTopologyIdRef(teLink.underlayTeTopologyId().topologyId()); .teTopologyIdRef(teLink.underlayTeTopologyId().topologyId());
pathBuilder = pathBuilder.networkIdRef(teTopologyService.networkId(teLink.underlayTeTopologyId())); pathBuilder = pathBuilder.networkIdRef(teTopologyService.networkId(teLink.underlayTeTopologyId()));
for (PathElement backupPathElementTe : tePath.pathElements()) { for (PathElement backupPathElementTe : tePath.pathElements()) {
org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
.ietftetopology.telinkunderlayattributes.underlaybackuppath.PathElement .ietftetopology.telinkunderlayattributes.underlaybackuppath.PathElement
.PathElementBuilder elementBuilder = .PathElementBuilder elementBuilder =
org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
.ietftetopology.telinkunderlayattributes.underlaybackuppath.DefaultPathElement .ietftetopology.telinkunderlayattributes.underlaybackuppath.DefaultPathElement
.builder(); .builder();
elementBuilder = elementBuilder.pathElementId(backupPathElementTe.pathElementId()); elementBuilder = elementBuilder.pathElementId(backupPathElementTe.pathElementId());
// TODO: add some Type cross conversion //TODO: check more types here
// elementBuilder.type(type); 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 pathBuilder = pathBuilder
.addToPathElement(elementBuilder.build()); .addToPathElement(elementBuilder.build());
@ -570,9 +551,9 @@ public final class LinkConverter {
TeLinkTpKey peerTeLinkKey = null; TeLinkTpKey peerTeLinkKey = null;
if (yangLink.destination() != null) { if (yangLink.destination() != null) {
peerTeLinkKey = new TeLinkTpKey(teNodeIdDestLong, peerTeLinkKey = new TeLinkTpKey(teNodeIdDestLong,
findTeTpId(yangNetwork, findTeTpId(yangNetwork,
yangLink.destination().destNode(), yangLink.destination().destNode(),
yangLink.destination().destTp())); yangLink.destination().destTp()));
} }
TeLinkTpGlobalKey supportTeLinkId = findSupportTeLinkId(yangNetworks, yangLink); TeLinkTpGlobalKey supportTeLinkId = findSupportTeLinkId(yangNetworks, yangLink);
@ -634,20 +615,21 @@ public final class LinkConverter {
List<Long> interLayerLocks = null; // FIXME: how to find interLayerLocks? List<Long> interLayerLocks = null; // FIXME: how to find interLayerLocks?
List<UnreservedBandwidth> listOfUnreservedBandwidth = yangLinkAtrr.unreservedBandwidth(); List<UnreservedBandwidth> listOfUnreservedBandwidth = yangLinkAtrr.unreservedBandwidth();
float[] availBandwidth = new float[listOfUnreservedBandwidth.size()]; float[] availBandwidth = new float[MAX_PRIORITY + 1];
int i = 0;
for (UnreservedBandwidth urbw : listOfUnreservedBandwidth) { for (UnreservedBandwidth urbw : listOfUnreservedBandwidth) {
availBandwidth[i] = urbw.bandwidth().floatValue(); availBandwidth[urbw.priority()] = urbw.bandwidth().floatValue();
i++;
} }
float[] maxBandwidth = new float[1]; float[] maxBandwidth = new float[MAX_PRIORITY + 1];
if (yangLinkAtrr.maxLinkBandwidth() != null) { 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[] maxAvailLspBandwidth = availBandwidth; // FIXME: how to find this?
float[] minAvailLspBandwidth = null; // FIXME: how to find this? float[] minAvailLspBandwidth = availBandwidth; // FIXME: how to find this?
LinkBandwidth bandwidth = new LinkBandwidth( LinkBandwidth bandwidth = new LinkBandwidth(
maxBandwidth, maxBandwidth,
availBandwidth, availBandwidth,
@ -665,9 +647,8 @@ public final class LinkConverter {
TePathAttributes teAttributes = TePathAttributes teAttributes =
new TePathAttributes(yangLinkAtrr.teDefaultMetric(), new TePathAttributes(yangLinkAtrr.teDefaultMetric(),
yangLinkAtrr.performanceMetric() == null ? null : yangLinkAtrr.performanceMetric() == null ? null :
(yangLinkAtrr.performanceMetric().measurement() == null ? null : (yangLinkAtrr.performanceMetric().measurement() == null ? null :
yangLinkAtrr.performanceMetric().measurement() yangLinkAtrr.performanceMetric().measurement().unidirectionalDelay()),
.unidirectionalDelay()),
srlgs); srlgs);
teData = new CommonLinkData(adminStatus, teData = new CommonLinkData(adminStatus,
opStatus, opStatus,
@ -688,7 +669,7 @@ public final class LinkConverter {
} }
private static TeLinkTpGlobalKey findSupportTeLinkId(Networks yangNetworks, private static TeLinkTpGlobalKey findSupportTeLinkId(Networks yangNetworks,
Link yangLink) { Link yangLink) {
Network teNetworkFound = null; Network teNetworkFound = null;
LinkId teLinkIdFound = null; LinkId teLinkIdFound = null;
TeLinkTpGlobalKey supportTeLinkId = null; TeLinkTpGlobalKey supportTeLinkId = null;
@ -741,7 +722,7 @@ public final class LinkConverter {
supportTeLinkId = new TeLinkTpGlobalKey(teTopologyId.providerId(), supportTeLinkId = new TeLinkTpGlobalKey(teTopologyId.providerId(),
teTopologyId.clientId(), teTopologyId.clientId(),
Long.valueOf(teTopologyId Long.valueOf(teTopologyId
.topologyId()), .topologyId()),
tenIdLong, teSupportLinkTpId); tenIdLong, teSupportLinkTpId);
} }
@ -783,7 +764,7 @@ public final class LinkConverter {
if (yangTpnode.tpId().equals(yangTpId)) { if (yangTpnode.tpId().equals(yangTpId)) {
if (yangTpnode.yangAugmentedInfoMap() != null if (yangTpnode.yangAugmentedInfoMap() != null
&& !yangTpnode.yangAugmentedInfoMap() && !yangTpnode.yangAugmentedInfoMap()
.isEmpty()) { .isEmpty()) {
AugmentedNtTerminationPoint yangTpAugment = AugmentedNtTerminationPoint yangTpAugment =
(AugmentedNtTerminationPoint) yangTpnode (AugmentedNtTerminationPoint) yangTpnode
.yangAugmentedInfo(AugmentedNtTerminationPoint.class); .yangAugmentedInfo(AugmentedNtTerminationPoint.class);
@ -799,18 +780,17 @@ public final class LinkConverter {
} }
return teTpId; return teTpId;
} }
/** /**
* Link object conversion from YANG to TE Topology subsystem. * Link object conversion from YANG to TE Topology subsystem.
* *
* @param yangLink YANG link * @param yangLink YANG link
* @param yangNetwork YANG network * @param yangNetwork YANG network
* @param yangNetworks YANG networks * @param yangNetworks YANG networks
* @return TE subsystem link * @return TE subsystem link
*/ */
public static org.onosproject.tetopology.management.api.link.NetworkLink public static org.onosproject.tetopology.management.api.link.NetworkLink
yang2TeSubsystemLink(Link yangLink, Network yangNetwork, yang2TeSubsystemLink(Link yangLink, Network yangNetwork,
Networks yangNetworks) { Networks yangNetworks) {
NetworkId networkId = yangNetwork.networkId(); NetworkId networkId = yangNetwork.networkId();
checkNotNull(yangLink, E_NULL_YANG_TELINK); checkNotNull(yangLink, E_NULL_YANG_TELINK);
@ -831,17 +811,17 @@ public final class LinkConverter {
if (yangLink.source() != null) { if (yangLink.source() != null) {
TerminationPointKey source = new TerminationPointKey( TerminationPointKey source = new TerminationPointKey(
KeyId.keyId(networkId.uri().toString()), KeyId.keyId(networkId.uri().toString()),
KeyId.keyId(yangLink.source().sourceNode().uri().toString()), KeyId.keyId(yangLink.source().sourceNode().uri().toString()),
KeyId.keyId(yangLink.source().sourceTp().uri().toString())); KeyId.keyId(yangLink.source().sourceTp().uri().toString()));
sourceNodeTpKey = new NodeTpKey(source.nodeId(), source.tpId()); sourceNodeTpKey = new NodeTpKey(source.nodeId(), source.tpId());
} }
if (yangLink.destination() != null) { if (yangLink.destination() != null) {
TerminationPointKey destination = new TerminationPointKey( TerminationPointKey destination = new TerminationPointKey(
KeyId.keyId(networkId.uri().toString()), KeyId.keyId(networkId.uri().toString()),
KeyId.keyId(yangLink.destination().destNode().uri().toString()), KeyId.keyId(yangLink.destination().destNode().uri().toString()),
KeyId.keyId(yangLink.destination().destTp().uri().toString())); KeyId.keyId(yangLink.destination().destTp().uri().toString()));
destinationNodeTpKey = new NodeTpKey(destination.nodeId(), destination.tpId()); destinationNodeTpKey = new NodeTpKey(destination.nodeId(), destination.tpId());
} }
@ -873,19 +853,25 @@ public final class LinkConverter {
} }
private static org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath private static org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath
yang2TeSubsystemUnderlayPrimaryPath(UnderlayPrimaryPath yangpath, yang2TeSubsystemUnderlayPrimaryPath(UnderlayPrimaryPath yangpath,
long teNodeId) { long teNodeId) {
org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath teUnderlayPrimaryPath = null; org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath teUnderlayPrimaryPath = null;
List<PathElement> pathElementList = Lists.newArrayList(); List<PathElement> pathElementList = Lists.newArrayList();
for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
.telinkunderlayattributes.underlayprimarypath. .telinkunderlayattributes.underlayprimarypath.
PathElement pathElementConfigYang : yangpath.pathElement()) { PathElement pathElementYang : yangpath.pathElement()) {
// TODO: find the proper type (ElementType) from pathElementConfigYang.type() long nodeId = 0;
PathElement tePathElement = new PathElement(pathElementConfigYang.pathElementId(), ElementType type = null;
teNodeId, // TODO: check more types
null, 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? false); // FIXME: how to find the proper value for loose?
pathElementList.add(tePathElement); pathElementList.add(tePathElement);
} }
@ -897,11 +883,11 @@ public final class LinkConverter {
} }
private static List<UnderlayBackupPath> private static List<UnderlayBackupPath>
yang2TeSubsystemUnderlayBackupPaths( yang2TeSubsystemUnderlayBackupPaths(
List<org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology. List<org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
rev20160708.ietftetopology.telinkunderlayattributes. rev20160708.ietftetopology.telinkunderlayattributes.
UnderlayBackupPath> yangpaths, UnderlayBackupPath> yangpaths,
long teNodeId) { long teNodeId) {
List<UnderlayBackupPath> underlayBackupPathsList = Lists.newArrayList(); List<UnderlayBackupPath> underlayBackupPathsList = Lists.newArrayList();
for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 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 yangConfig : yangpaths) {
UnderlayBackupPath ubp = null; UnderlayBackupPath ubp = null;
List<PathElement> backupPathElementList = Lists.newArrayList(); List<PathElement> 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 for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
.telinkunderlayattributes.underlaybackuppath. .telinkunderlayattributes.underlaybackuppath.
PathElement pathElementBackupYang : yangConfig.pathElement()) { PathElement backupYang : yangConfig.pathElement()) {
// TODO: check more types
PathElement tePathElementBackup = new PathElement(pathElementBackupYang.pathElementId(), if (backupYang.type() instanceof UnnumberedLink) {
teNodeId, nodeId = Long.valueOf(((UnnumberedLink) backupYang.type()).routerId().toString());
null, // FIXME: find the proper ElementType type = new TeLinkId(((UnnumberedLink) backupYang.type()).interfaceId());
// from pathElementBackupYang.type() }
false); // FIXME: find the proper value for loose PathElement tePathElementBackup = new PathElement(backupYang.pathElementId(),
nodeId,
type,
false);
backupPathElementList.add(tePathElementBackup); backupPathElementList.add(tePathElementBackup);
} }
ubp = new UnderlayBackupPath(yangConfig.index(), 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. * TE Link underlay path Config object conversion from YANG to TE Topology subsystem.
* *
* @param yangLinkAtrr YANG link Config YANG object * @param yangLinkAtrr YANG link Config YANG object
* @return teSubsystem TE underlay path object * @return teSubsystem TE underlay path object
*/ */
private static org.onosproject.tetopology.management.api.link.UnderlayPath 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); checkNotNull(yangLinkAtrr, E_NULL_YANG_TELINK_CONFIG);
@ -957,12 +948,12 @@ public final class LinkConverter {
org.onosproject.tetopology.management.api.link.UnderlayPath teUnderlay = null; org.onosproject.tetopology.management.api.link.UnderlayPath teUnderlay = null;
if (yangLinkAtrr.underlay() != null) { if (yangLinkAtrr.underlay() != null) {
teUnderlay = new org.onosproject.tetopology.management.api.link. teUnderlay = new org.onosproject.tetopology.management.api.link.
UnderlayPath(underlayPrimaryPath, UnderlayPath(underlayPrimaryPath,
underlayBackupPathsList, underlayBackupPathsList,
TunnelProtectionType.of(yangLinkAtrr.underlay().underlayProtectionType()), TunnelProtectionType.of(yangLinkAtrr.underlay().underlayProtectionType()),
(long) yangLinkAtrr.underlay().underlayTrailSrc().tpRef(), // Is this correct? (long) yangLinkAtrr.underlay().underlayTrailSrc().tpRef(), // Is this correct?
(long) yangLinkAtrr.underlay().underlayTrailDes().tpRef(), // Is this correct? (long) yangLinkAtrr.underlay().underlayTrailDes().tpRef(), // Is this correct?
teTunnelId); teTunnelId);
} }
return teUnderlay; return teUnderlay;
@ -1023,16 +1014,14 @@ public final class LinkConverter {
} }
/** /**
* Converts a YANG network link notification event into a TE network * Converts a YANG network link notification event into a TE network link.
* link.
* *
* @param yangLinkEvent YANG network link notification * @param yangLinkEvent YANG network link notification
* @param teTopologyService TE Topology service used to help the conversion * @param teTopologyService TE Topology service used to help the conversion
* @return TE network link * @return TE network link
*/ */
public static NetworkLink yangLinkEvent2NetworkLink(TeLinkEvent yangLinkEvent, public static NetworkLink yangLinkEvent2NetworkLink(TeLinkEvent yangLinkEvent,
TeTopologyService teTopologyService) { TeTopologyService teTopologyService) {
KeyId linkId = yangLinkEvent2NetworkLinkKey(yangLinkEvent).linkId(); KeyId linkId = yangLinkEvent2NetworkLinkKey(yangLinkEvent).linkId();
org.onosproject.tetopology.management.api. org.onosproject.tetopology.management.api.
@ -1061,28 +1050,27 @@ public final class LinkConverter {
TeOperStatus opState = yangLinkEvent.operStatus(); TeOperStatus opState = yangLinkEvent.operStatus();
org.onosproject.tetopology.management.api. org.onosproject.tetopology.management.api.
TeStatus opStatus = EnumConverter.yang2TeSubsystemOpStatus(opState); TeStatus opStatus = EnumConverter.yang2TeSubsystemOpStatus(opState);
TeLink updatedTeLink = yangLinkEvent2TeLinkAttributes(yangLinkEvent, teLink, opStatus); TeLink updatedTeLink = yangLinkEvent2TeLinkAttributes(yangLinkEvent, teLink, opStatus);
NetworkLink updatedNetworkLink = new DefaultNetworkLink(linkId, NetworkLink updatedNetworkLink = new DefaultNetworkLink(linkId, sourceTp, destTp, supportingLinkIds,
sourceTp,
destTp,
supportingLinkIds,
updatedTeLink); updatedTeLink);
return updatedNetworkLink; return updatedNetworkLink;
} }
private static TeLink yangLinkEvent2TeLinkAttributes(TeLinkEvent yangLinkEvent, private static TeLink yangLinkEvent2TeLinkAttributes(TeLinkEvent yangLinkEvent, TeLink oldTeLink, TeStatus
TeLink oldTeLink, opStatus) {
TeStatus opStatus) {
TeLinkAttributes yangTeLinkAttrs = yangLinkEvent.teLinkAttributes(); TeLinkAttributes yangTeLinkAttrs = yangLinkEvent.teLinkAttributes();
TeLinkTpKey teLinkKey = oldTeLink.teLinkKey(); TeLinkTpKey teLinkKey = oldTeLink.teLinkKey();
//long teNodeIdDest = oldTeLink.peerTeLinkKey().teNodeId();
//long teNodeIdSrc = oldTeLink.teLinkKey().teNodeId();
long teNodeIdDest = 0; long teNodeIdDest = 0;
long teNodeIdSrc = 0; long teNodeIdSrc = 0;

View File

@ -15,8 +15,12 @@
*/ */
package org.onosproject.teyang.utils.topology; package org.onosproject.teyang.utils.topology;
import com.google.common.collect.Lists; import static com.google.common.base.Preconditions.checkNotNull;
import com.google.common.collect.Maps; import static com.google.common.base.Preconditions.checkState;
import java.util.List;
import java.util.Map;
import org.onosproject.net.DeviceId; import org.onosproject.net.DeviceId;
import org.onosproject.tetopology.management.api.KeyId; import org.onosproject.tetopology.management.api.KeyId;
import org.onosproject.tetopology.management.api.TeTopologyEvent; 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.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.List; import com.google.common.collect.Lists;
import java.util.Map; import com.google.common.collect.Maps;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
/** /**
@ -221,12 +222,13 @@ public final class NetworkConverter {
/** /**
* Networks object conversion from YANG to TE Topology subsystem. * 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 yangNetworkStates NetworkStates YANG object
* @param deviceId The identifier of RESTCONF server device
* @return teSubsystem TE Topology subsystem networks object * @return teSubsystem TE Topology subsystem networks object
*/ */
public static org.onosproject.tetopology.management.api.Networks yang2TeSubsystemNetworks( 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, E_NULL_YANG_NETWORKS);
checkNotNull(yangNetworks.network(), E_NULL_YANG_NETWORK_LIST); checkNotNull(yangNetworks.network(), E_NULL_YANG_NETWORK_LIST);
checkNotNull(yangNetworkStates, E_NULL_YANG_NETWORKSSTATE); checkNotNull(yangNetworkStates, E_NULL_YANG_NETWORKSSTATE);
@ -240,9 +242,9 @@ public final class NetworkConverter {
if (stateNetwork == null) { if (stateNetwork == null) {
log.info("networkId {} can't be found in yangNetworkStates", log.info("networkId {} can't be found in yangNetworkStates",
network.networkId()); network.networkId());
teNetwork = yang2TeSubsystemNetwork(network, yangNetworks); teNetwork = yang2TeSubsystemNetwork(network, yangNetworks, deviceId);
} else { } else {
teNetwork = yang2TeSubsystemNetwork(network, stateNetwork, yangNetworks); teNetwork = yang2TeSubsystemNetwork(network, stateNetwork, yangNetworks, deviceId);
} }
networks.add(teNetwork); networks.add(teNetwork);
} }
@ -279,11 +281,12 @@ public final class NetworkConverter {
} }
private static NetworkBuilder te2YangLinks(NetworkBuilder builder, private static NetworkBuilder te2YangLinks(NetworkBuilder builder,
Map<KeyId, NetworkLink> teLinks) { Map<KeyId, NetworkLink> teLinks,
TeTopologyService teTopologyService) {
List<Link> linkList = Lists.newArrayList(); List<Link> linkList = Lists.newArrayList();
for (org.onosproject.tetopology.management.api.link.NetworkLink link : teLinks.values()) { 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(); AugmentedNdNetworkBuilder ndAugment = DefaultAugmentedNdNetwork.builder();
ndAugment.link(linkList); ndAugment.link(linkList);
@ -367,7 +370,7 @@ public final class NetworkConverter {
// Add links - link is the augmentation // Add links - link is the augmentation
if (teSubsystem.links() != null) { if (teSubsystem.links() != null) {
builder = te2YangLinks(builder, teSubsystem.links()); builder = te2YangLinks(builder, teSubsystem.links(), teTopologyService);
} }
// TE Topology IDs // TE Topology IDs
@ -421,7 +424,7 @@ public final class NetworkConverter {
org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns. org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.
yang.ietf.network.rev20151208.ietfnetwork.networksstate. yang.ietf.network.rev20151208.ietfnetwork.networksstate.
Network yangNetworkState, Network yangNetworkState,
Networks yangNetworks) { Networks yangNetworks, DeviceId deviceId) {
checkNotNull(yangNetwork, E_NULL_YANG_NETWORK); checkNotNull(yangNetwork, E_NULL_YANG_NETWORK);
checkNotNull(yangNetwork.networkId(), E_NULL_YANG_NETWORKID); checkNotNull(yangNetwork.networkId(), E_NULL_YANG_NETWORKID);
String networkId = yangNetwork.networkId().uri().string(); String networkId = yangNetwork.networkId().uri().string();
@ -432,7 +435,6 @@ public final class NetworkConverter {
Map<KeyId, NetworkLink> teLinks = null; Map<KeyId, NetworkLink> teLinks = null;
org.onosproject.tetopology.management.api.TeTopologyId teTopologyId = null; org.onosproject.tetopology.management.api.TeTopologyId teTopologyId = null;
boolean serverProvided = false; boolean serverProvided = false;
DeviceId ownerId = null;
// Supporting networks // Supporting networks
if (yangNetwork.supportingNetwork() != null) { if (yangNetwork.supportingNetwork() != null) {
@ -483,7 +485,7 @@ public final class NetworkConverter {
org.onosproject.tetopology.management.api.DefaultNetwork network = org.onosproject.tetopology.management.api.DefaultNetwork network =
new org.onosproject.tetopology.management.api.DefaultNetwork(networkKeyId, supportingNetworkIds, new org.onosproject.tetopology.management.api.DefaultNetwork(networkKeyId, supportingNetworkIds,
teNodes, teLinks, teTopologyId, teNodes, teLinks, teTopologyId,
serverProvided, ownerId); serverProvided, deviceId);
return network; return network;
} }
@ -492,11 +494,13 @@ public final class NetworkConverter {
* *
* @param yangNetwork Network YANG object * @param yangNetwork Network YANG object
* @param yangNetworks Networks YANG object * @param yangNetworks Networks YANG object
* @param deviceId The identifier of RESTCONF server device
* @return network TE Topology subsystem networks object * @return network TE Topology subsystem networks object
*/ */
public static org.onosproject.tetopology.management.api.Network yang2TeSubsystemNetwork(Network yangNetwork, public static org.onosproject.tetopology.management.api.Network yang2TeSubsystemNetwork(Network yangNetwork,
Networks yangNetworks) { Networks yangNetworks,
return yang2TeDefaultNetwork(yangNetwork, null, yangNetworks); DeviceId deviceId) {
return yang2TeDefaultNetwork(yangNetwork, null, yangNetworks, deviceId);
} }
/** /**
@ -505,16 +509,17 @@ public final class NetworkConverter {
* @param yangNetwork Network YANG object * @param yangNetwork Network YANG object
* @param yangNetworkState NetworkState YANG object * @param yangNetworkState NetworkState YANG object
* @param yangNetworks Networks YANG object * @param yangNetworks Networks YANG object
* @param deviceId The identifier of RESTCONF server device
* @return teSubsystem TE Topology subsystem networks object * @return teSubsystem TE Topology subsystem networks object
*/ */
public static org.onosproject.tetopology.management.api.Network yang2TeSubsystemNetwork(Network yangNetwork, 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 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, E_NULL_YANG_NETWORKSSTATE_NETWORK);
checkNotNull(yangNetworkState.networkRef(), E_NULL_YANG_NETWORKSSTATE_NETWORKREF); checkNotNull(yangNetworkState.networkRef(), E_NULL_YANG_NETWORKSSTATE_NETWORKREF);
org.onosproject.tetopology.management.api.DefaultNetwork teNetwork = org.onosproject.tetopology.management.api.DefaultNetwork teNetwork =
yang2TeDefaultNetwork(yangNetwork, yangNetworkState, yangNetworks); yang2TeDefaultNetwork(yangNetwork, yangNetworkState, yangNetworks, deviceId);
String networkref = yangNetworkState.networkRef().toString(); String networkref = yangNetworkState.networkRef().toString();
checkState(teNetwork.networkId().toString().equals(networkref), checkState(teNetwork.networkId().toString().equals(networkref),
@ -567,7 +572,7 @@ public final class NetworkConverter {
returnType = IetfTeTopologyEvent.Type.TE_NODE_EVENT; returnType = IetfTeTopologyEvent.Type.TE_NODE_EVENT;
break; break;
default: default:
log.error("teTopoEventType2YangIetfTopoEventType: unknown type: {}", type); log.warn("teTopoEventType2YangIetfTopoEventType: unknown type: {}", type);
} }
return returnType; return returnType;
@ -590,9 +595,7 @@ public final class NetworkConverter {
returnType = TeTopologyEventTypeEnum.UPDATE; returnType = TeTopologyEventTypeEnum.UPDATE;
break; break;
default: default:
// log.warn("teTopoEventType2YangIetfTopoEventType: unsupported log.warn("teTopoEventType2YangteTopoEventType: unsupported type: {}", type);
// type: {}",
// type);
break; break;
} }

View File

@ -15,8 +15,12 @@
*/ */
package org.onosproject.teyang.utils.topology; package org.onosproject.teyang.utils.topology;
import com.google.common.collect.Lists; import static com.google.common.base.Preconditions.checkNotNull;
import com.google.common.collect.Maps;
import java.util.BitSet;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.MapUtils;
import org.onlab.packet.Ip4Address; import org.onlab.packet.Ip4Address;
import org.onosproject.tetopology.management.api.EncodingType; 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.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.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;
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
.DefaultNode; .ietfnetwork.networks.network.DefaultNode;
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
.Node; .ietfnetwork.networks.network.Node;
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
.node.DefaultSupportingNode; .ietfnetwork.networks.network.node.DefaultSupportingNode;
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
.node.SupportingNode; .ietfnetwork.networks.network.node.SupportingNode;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology.TpId;
.TpId; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology .ietfnetworktopology.networks.network.node.AugmentedNdNode;
.networks.network.node.AugmentedNdNode; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.ietfnetworktopology .ietfnetworktopology.networks.network.node.DefaultAugmentedNdNode;
.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
.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.TeNodeEvent;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.DefaultInformationSourceState;
.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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.informationsourceattributes.informationsourcestate.DefaultTopology;
.informationsourceattributes.InformationSourceState; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
.informationsourceattributes.informationsourcestate.DefaultTopology; .ietftetopology.networks.network.node.AugmentedNwNode;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
.informationsourceattributes.informationsourcestate.Topology; .ietftetopology.networks.network.node.DefaultAugmentedNwNode;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks.network.node.terminationpoint.AugmentedNtTerminationPoint;
.network.node.AugmentedNwNode; 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.networks import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.DefaultTe.TeBuilder;
.network.node.DefaultAugmentedNwNode; 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.networks import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.Config;
.network.node.terminationpoint.AugmentedNtTerminationPoint; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.DefaultState;
.tenodeaugment.DefaultTe; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeaugment.te.State;
.tenodeaugment.DefaultTe.TeBuilder; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconfigattributes.DefaultTeNodeAttributes;
.tenodeaugment.Te; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconfigattributes.TeNodeAttributes.TeNodeAttributesBuilder;
.tenodeaugment.te.Config; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.DefaultConnectivityMatrix.ConnectivityMatrixBuilder;
.tenodeaugment.te.DefaultConfig; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrix.connectivitymatrix.DefaultTo;
.tenodeaugment.te.DefaultState; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeinfoattributes.UnderlayTopology;
.tenodeaugment.te.DefaultTunnelTerminationPoint; 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 import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodetunnelterminationcapability.TerminationCapability;
.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.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.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.TeNodeId;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeTopologyEventType;
.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.TeTopologyId;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.tetopologyeventtype.TeTopologyEventTypeEnum;
.tetopologyeventtype.TeTopologyEventTypeEnum;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev20130715.ietfyangtypes.DottedQuad; import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev20130715.ietfyangtypes.DottedQuad;
import java.util.BitSet; import com.google.common.collect.Lists;
import java.util.List; import com.google.common.collect.Maps;
import java.util.Map;
import static com.google.common.base.Preconditions.checkNotNull;
/** /**
* Node conversion functions. * Node conversion functions.
@ -166,7 +138,7 @@ public final class NodeConverter {
.builder(); .builder();
teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder
.isAbstract(teSubsystemTeNode.flags() .isAbstract(teSubsystemTeNode.flags()
.get(TeNode.BIT_ABSTRACT)); .get(TeNode.BIT_ABSTRACT));
if (teSubsystemTeNode.adminStatus() != null) { if (teSubsystemTeNode.adminStatus() != null) {
teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder
@ -181,7 +153,7 @@ public final class NodeConverter {
if (teSubsystemTeNode.underlayTeTopologyId() != null) { if (teSubsystemTeNode.underlayTeTopologyId() != null) {
teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder
.underlayTopology(teNode2YangUnderlay(teSubsystemTeNode .underlayTopology(teNode2YangUnderlay(teSubsystemTeNode
.underlayTeTopologyId(), teTopologyService)); .underlayTeTopologyId(), teTopologyService));
} }
// TODO: should we ignore this from te to yang? as we've already set yang supportingNode // 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 private static TeNodeAttributesBuilder
te2YangConnectivityMatrix(TeNodeAttributesBuilder teNodeAttributesConfigBuilder, te2YangConnectivityMatrix(TeNodeAttributesBuilder teNodeAttributesConfigBuilder,
Map<Long, ConnectivityMatrix> connectivityMatrices) { Map<Long, ConnectivityMatrix> connectivityMatrices) {
ConnectivityMatrixBuilder connectivityMatrixConfigBuilder = DefaultConnectivityMatrix.builder(); ConnectivityMatrixBuilder connectivityMatrixConfigBuilder = DefaultConnectivityMatrix.builder();
for (Map.Entry<Long, ConnectivityMatrix> teCmEntry : for (Map.Entry<Long, ConnectivityMatrix> teCmEntry :
connectivityMatrices.entrySet()) { connectivityMatrices.entrySet()) {
connectivityMatrixConfigBuilder = connectivityMatrixConfigBuilder connectivityMatrixConfigBuilder = connectivityMatrixConfigBuilder
.id(teCmEntry.getKey()) .id(teCmEntry.getKey())
.isAllowed(!teCmEntry.getValue().flags() .isAllowed(!teCmEntry.getValue().flags()
.get(ConnectivityMatrix.BIT_DISALLOWED)) .get(ConnectivityMatrix.BIT_DISALLOWED))
.from(new DefaultFrom.FromBuilder() // TODO: for now, assuming that there is .from(new DefaultFrom.FromBuilder() // TODO: for now, assuming that there is
// only one 'from', and mergingList is empty // only one 'from', and mergingList is empty
.tpRef(((TeLinkId) teCmEntry.getValue().from()).value()) .tpRef(((TeLinkId) teCmEntry.getValue().from()).value())
.build()) .build())
.to(new DefaultTo.ToBuilder() // TODO: for now, assuming that there is only .to(new DefaultTo.ToBuilder() // TODO: for now, assuming that there is only
// one item in constrainingElements list // one item in constrainingElements list
.tpRef(((TeLinkId) teCmEntry.getValue().constrainingElements().get(0)).value()) .tpRef(((TeLinkId) teCmEntry.getValue().constrainingElements().get(0)).value())
.build()); .build());
teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder
.addToConnectivityMatrix(connectivityMatrixConfigBuilder .addToConnectivityMatrix(connectivityMatrixConfigBuilder
.build()); .build());
} }
return teNodeAttributesConfigBuilder; return teNodeAttributesConfigBuilder;
} }
@ -230,7 +202,7 @@ public final class NodeConverter {
UnderlayTopology.UnderlayTopologyBuilder underlayBuilder = DefaultUnderlayTopology UnderlayTopology.UnderlayTopologyBuilder underlayBuilder = DefaultUnderlayTopology
.builder() .builder()
.teTopologyIdRef(TeTopologyId .teTopologyIdRef(TeTopologyId
.fromString(String.valueOf(underlayTopology.topologyId()))) .fromString(String.valueOf(underlayTopology.topologyId())))
.clientIdRef(underlayTopology.clientId()) .clientIdRef(underlayTopology.clientId())
.providerIdRef(underlayTopology.providerId()); .providerIdRef(underlayTopology.providerId());
@ -250,10 +222,10 @@ public final class NodeConverter {
checkNotNull(teSubsystemTeNode, E_NULL_TE_SUBSYSTEM_TE_NODE); checkNotNull(teSubsystemTeNode, E_NULL_TE_SUBSYSTEM_TE_NODE);
TeNodeAttributes TeNodeAttributes
.TeNodeAttributesBuilder teNodeAttributesStateBuilder = .TeNodeAttributesBuilder teNodeAttributesStateBuilder =
DefaultTeNodeAttributes.builder() DefaultTeNodeAttributes.builder()
.isAbstract(teSubsystemTeNode.flags() .isAbstract(teSubsystemTeNode.flags()
.get(TeNode.BIT_ABSTRACT)); .get(TeNode.BIT_ABSTRACT));
if (teSubsystemTeNode.adminStatus() != null) { if (teSubsystemTeNode.adminStatus() != null) {
teNodeAttributesStateBuilder = teNodeAttributesStateBuilder teNodeAttributesStateBuilder = teNodeAttributesStateBuilder
@ -268,12 +240,12 @@ public final class NodeConverter {
if (teSubsystemTeNode.underlayTeTopologyId() != null) { if (teSubsystemTeNode.underlayTeTopologyId() != null) {
teNodeAttributesStateBuilder = teNodeAttributesStateBuilder teNodeAttributesStateBuilder = teNodeAttributesStateBuilder
.underlayTopology(teNode2YangUnderlay(teSubsystemTeNode .underlayTopology(teNode2YangUnderlay(teSubsystemTeNode
.underlayTeTopologyId(), teTopologyService)); .underlayTeTopologyId(), teTopologyService));
} }
if (teSubsystemTeNode.connectivityMatrices() != null) { if (teSubsystemTeNode.connectivityMatrices() != null) {
teNodeAttributesStateBuilder = te2YangConnectivityMatrix(teNodeAttributesStateBuilder, teNodeAttributesStateBuilder = te2YangConnectivityMatrix(teNodeAttributesStateBuilder,
teSubsystemTeNode.connectivityMatrices()); teSubsystemTeNode.connectivityMatrices());
} }
// TODO: should we ignore this from te to yang? as we've already set yang supportingNode // 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) { if (teSubsystemTeNode.opStatus() != null) {
yangStateBuilder = yangStateBuilder.operStatus(EnumConverter yangStateBuilder = yangStateBuilder.operStatus(EnumConverter
.teSubsystem2YangOperStatus(teSubsystemTeNode .teSubsystem2YangOperStatus(teSubsystemTeNode.opStatus()));
.opStatus()));
} }
if (teSubsystemTeNode.sourceTeNodeId() != null) { if (teSubsystemTeNode.sourceTeNodeId() != null) {
@ -295,10 +266,10 @@ public final class NodeConverter {
Topology.TopologyBuilder topologyBuilder = DefaultTopology.builder(); Topology.TopologyBuilder topologyBuilder = DefaultTopology.builder();
topologyBuilder = topologyBuilder =
topologyBuilder.clientIdRef(teSubsystemTeNode.sourceTeNodeId().clientId()) topologyBuilder.clientIdRef(teSubsystemTeNode.sourceTeNodeId().clientId())
.providerIdRef(teSubsystemTeNode.sourceTeNodeId().providerId()) .providerIdRef(teSubsystemTeNode.sourceTeNodeId().providerId())
// is this correct? Why not sourceTeNodeId().teTopologyKey()? // is this correct? Why not sourceTeNodeId().teTopologyKey()?
.teTopologyIdRef(teSubsystemTeNode .teTopologyIdRef(teSubsystemTeNode
.sourceTeNodeId().topologyId()); .sourceTeNodeId().topologyId());
issBuilder = issBuilder.topology(topologyBuilder.build()); issBuilder = issBuilder.topology(topologyBuilder.build());
yangStateBuilder.informationSourceState(issBuilder.build()); yangStateBuilder.informationSourceState(issBuilder.build());
} }
@ -319,52 +290,52 @@ public final class NodeConverter {
} }
public static long bytesToLong(byte[] bytes) { public static long bytesToLong(byte[] bytes) {
return ((long) bytes[7] & 255L) << 56 return (bytes[7] & 255L) << 56
| ((long) bytes[6] & 255L) << 48 | (bytes[6] & 255L) << 48
| ((long) bytes[5] & 255L) << 40 | (bytes[5] & 255L) << 40
| ((long) bytes[4] & 255L) << 32 | (bytes[4] & 255L) << 32
| ((long) bytes[3] & 255L) << 24 | (bytes[3] & 255L) << 24
| ((long) bytes[2] & 255L) << 16 | (bytes[2] & 255L) << 16
| ((long) bytes[1] & 255L) << 8 | (long) bytes[0] & 255L; | (bytes[1] & 255L) << 8 | bytes[0] & 255L;
} }
} }
/** /**
* TE Node TunnelTerminationPoint object conversion from TE Topology subsystem to YANG. * TE Node TunnelTerminationPoint object conversion from TE Topology subsystem to YANG.
* *
* @param teTunnelTp TE TunnelTerminationPoint object * @param teTunnelTp TE TunnelTerminationPoint object
* @param teTpId * @param teTpId
* @param teTopologyService * @param teTopologyService
* @param teNodeKey * @param teNodeKey
* @return TunnelTerminationPoint YANG object * @return TunnelTerminationPoint YANG object
*/ */
private static TunnelTerminationPoint teSubsystem2YangTtp( private static TunnelTerminationPoint teSubsystem2YangTtp(
org.onosproject.tetopology.management.api.node org.onosproject.tetopology.management.api.node
.TunnelTerminationPoint teTunnelTp, Long teTpId, .TunnelTerminationPoint teTunnelTp, Long teTpId,
TeTopologyService teTopologyService, TeTopologyService teTopologyService,
TeNodeKey teNodeKey) { TeNodeKey teNodeKey) {
checkNotNull(teTunnelTp, E_NULL_TE_SUBSYSTEM_TE_TUNNEL_TP); checkNotNull(teTunnelTp, E_NULL_TE_SUBSYSTEM_TE_TUNNEL_TP);
TunnelTerminationPoint.TunnelTerminationPointBuilder tunnelTpBuilder = TunnelTerminationPoint.TunnelTerminationPointBuilder tunnelTpBuilder =
DefaultTunnelTerminationPoint.builder().tunnelTpId(ByteUtils.longToBytes(teTpId.longValue())); DefaultTunnelTerminationPoint.builder().tunnelTpId(ByteUtils.longToBytes(teTpId.longValue()));
org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
.ietftetopology.tenodeaugment.te.tunnelterminationpoint.Config.ConfigBuilder ttpConfigBuilder = .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();
org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
.ietftetopology.tenodeaugment.te.tunnelterminationpoint.State.StateBuilder ttpStateBuilder = .ietftetopology.tenodeaugment.te.tunnelterminationpoint.DefaultConfig.builder();
org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 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.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 // Assuming teTunnelTp only has one interLayerLock
if (teTunnelTp.interLayerLockList() != null && !teTunnelTp.interLayerLockList().isEmpty()) { if (teTunnelTp.interLayerLockList() != null && !teTunnelTp.interLayerLockList().isEmpty()) {
ttpConfigBuilder = ttpConfigBuilder.interLayerLockId(teTunnelTp.interLayerLockList().get(0)); ttpConfigBuilder = ttpConfigBuilder.interLayerLockId(teTunnelTp.interLayerLockList().get(0));
ttpStateBuilder = ttpStateBuilder.interLayerLockId(teTunnelTp.interLayerLockList().get(0)); ttpStateBuilder = ttpStateBuilder.interLayerLockId(teTunnelTp.interLayerLockList().get(0));
} }
TerminationCapability.TerminationCapabilityBuilder TerminationCapability.TerminationCapabilityBuilder
tcapConfigBuilder = DefaultTerminationCapability.builder(); tcapConfigBuilder = DefaultTerminationCapability.builder();
// TODO: retrieve more attributes from teTunnelTp and assign to tcapConfigBuilder. // TODO: retrieve more attributes from teTunnelTp and assign to tcapConfigBuilder.
// For which ones we can do the conversion? // For which ones we can do the conversion?
// FIXME: once new yang model is used, we can make llc from teTunnelTp.localLinkConnectivityList() // 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()); .network(netLinkKey.networkId()).links().get(netLinkKey.linkId());
tcapConfigBuilder = tcapConfigBuilder tcapConfigBuilder = tcapConfigBuilder
.linkTp(TpId.fromString(networkLink.source().tpId() .linkTp(TpId.fromString(networkLink.source().tpId()
.toString())); .toString()));
// convert teLinkId to networkLinkKey // convert teLinkId to networkLinkKey
ttpConfigBuilder = ttpConfigBuilder.addToTerminationCapability(tcapConfigBuilder.build()); ttpConfigBuilder = ttpConfigBuilder.addToTerminationCapability(tcapConfigBuilder.build());
} }
@ -396,13 +367,13 @@ public final class NodeConverter {
.network(netLinkKey.networkId()).links().get(netLinkKey.linkId()); .network(netLinkKey.networkId()).links().get(netLinkKey.linkId());
tcapStateBuilder = tcapStateBuilder tcapStateBuilder = tcapStateBuilder
.linkTp(TpId.fromString(networkLink.source().tpId() .linkTp(TpId.fromString(networkLink.source().tpId()
.toString())); .toString()));
ttpStateBuilder = ttpStateBuilder.addToTerminationCapability(tcapStateBuilder.build()); ttpStateBuilder = ttpStateBuilder.addToTerminationCapability(tcapStateBuilder.build());
} }
} }
tunnelTpBuilder = tunnelTpBuilder.config(ttpConfigBuilder.build()) tunnelTpBuilder = tunnelTpBuilder.config(ttpConfigBuilder.build())
.state(ttpStateBuilder.build()); .state(ttpStateBuilder.build());
return tunnelTpBuilder.build(); return tunnelTpBuilder.build();
} }
@ -410,9 +381,9 @@ public final class NodeConverter {
/** /**
* Node object conversion from TE Topology subsystem to YANG. * 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 teTopologyService teTopology core service
* @param teTopologyKey teTopologyKey * @param teTopologyKey teTopologyKey
* @return YANG node * @return YANG node
*/ */
public static Node teSubsystem2YangNode(org.onosproject.tetopology.management.api.node.NetworkNode teSubsystem, public static Node teSubsystem2YangNode(org.onosproject.tetopology.management.api.node.NetworkNode teSubsystem,
@ -430,10 +401,10 @@ public final class NodeConverter {
.builder(); .builder();
for (NetworkNodeKey nodeKey : teSubsystem.supportingNodeIds()) { for (NetworkNodeKey nodeKey : teSubsystem.supportingNodeIds()) {
sNodes.add(spNodeBuilder sNodes.add(spNodeBuilder
.networkRef(NetworkId .networkRef(NetworkId
.fromString(nodeKey.networkId().toString())) .fromString(nodeKey.networkId().toString()))
.nodeRef(NodeId.fromString(nodeKey.nodeId().toString())) .nodeRef(NodeId.fromString(nodeKey.nodeId().toString()))
.build()); .build());
} }
builder = builder.supportingNode(sNodes); builder = builder.supportingNode(sNodes);
} }
@ -446,7 +417,7 @@ public final class NodeConverter {
for (TerminationPoint teTp : teSubsystemTeTp.values()) { for (TerminationPoint teTp : teSubsystemTeTp.values()) {
tpAugmentBuilder.addToTerminationPoint(TerminationPointConverter tpAugmentBuilder.addToTerminationPoint(TerminationPointConverter
.teSubsystem2YangTerminationPoint(teTp)); .teSubsystem2YangTerminationPoint(teTp));
} }
builder.addYangAugmentedInfo(tpAugmentBuilder.build(), builder.addYangAugmentedInfo(tpAugmentBuilder.build(),
AugmentedNdNode.class); AugmentedNdNode.class);
@ -461,24 +432,21 @@ public final class NodeConverter {
TeBuilder yangTeBuilder = DefaultTe.builder(); TeBuilder yangTeBuilder = DefaultTe.builder();
yangTeBuilder = yangTeBuilder.teNodeId(TeNodeId.of(DottedQuad yangTeBuilder = yangTeBuilder.teNodeId(TeNodeId.of(DottedQuad
.of(Ip4Address.valueOf((int) teSubsystemTeNode .of(Ip4Address.valueOf((int) teSubsystemTeNode.teNodeId())
.teNodeId()) .toString())));
.toString())));
// Set configuration data // Set configuration data
// Set state data // Set state data
yangTeBuilder = yangTeBuilder.config(teNode2YangConfig(teSubsystemTeNode, teTopologyService)) yangTeBuilder = yangTeBuilder.config(teNode2YangConfig(teSubsystemTeNode, teTopologyService))
.state(teNode2YangState(teSubsystemTeNode, teTopologyService)); .state(teNode2YangState(teSubsystemTeNode, teTopologyService));
if (teSubsystemTeNode.tunnelTerminationPoints() != null) { if (teSubsystemTeNode.tunnelTerminationPoints() != null) {
for (Map.Entry<Long, org.onosproject.tetopology.management.api.node.TunnelTerminationPoint> entry : for (Map.Entry<Long, org.onosproject.tetopology.management.api.node.TunnelTerminationPoint> entry :
teSubsystemTeNode.tunnelTerminationPoints().entrySet()) { teSubsystemTeNode.tunnelTerminationPoints().entrySet()) {
yangTeBuilder = yangTeBuilder yangTeBuilder = yangTeBuilder
.addToTunnelTerminationPoint(teSubsystem2YangTtp( .addToTunnelTerminationPoint(teSubsystem2YangTtp(entry
entry.getValue(), entry.getKey(), .getValue(), entry.getKey(), teTopologyService,
teTopologyService, new TeNodeKey(teTopologyKey, teSubsystemTeNode.teNodeId())));
new TeNodeKey(teTopologyKey,
teSubsystemTeNode.teNodeId())));
} }
} }
@ -492,12 +460,12 @@ public final class NodeConverter {
/** /**
* Node object conversion from YANG to TE Topology subsystem. * 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 * @param yangNetwork YANG network
* @return TE subsystem node * @return TE subsystem node
*/ */
public static org.onosproject.tetopology.management.api.node.NetworkNode 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); checkNotNull(yangNode, E_NULL_YANG_NODE);
org.onosproject.tetopology.management.api.node.DefaultNetworkNode 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 // TODO: convert connectivity matrix from yang to te
private static Map<Long, ConnectivityMatrix> private static Map<Long, ConnectivityMatrix>
yang2TeSubsystemNodeConnectivityMatrix(String networkId, yang2TeSubsystemNodeConnectivityMatrix(String networkId,
String nodeId, String nodeId,
List<org.onosproject.yang.gen.v1.urn.ietf List<org.onosproject.yang.gen.v1.urn.ietf
.params.xml.ns.yang.ietf.te.topology.rev20160708 .params.xml.ns.yang.ietf.te.topology.rev20160708
.ietftetopology.tenodeconnectivitymatrix. .ietftetopology.tenodeconnectivitymatrix.
ConnectivityMatrix> yangMatrix) { ConnectivityMatrix> yangMatrix) {
Map<Long, ConnectivityMatrix> teCmList = Maps.newHashMap(); Map<Long, ConnectivityMatrix> teCmList = Maps.newHashMap();
@ -576,8 +544,8 @@ public final class NodeConverter {
TePathAttributes teAttributes = new TePathAttributes teAttributes = new
TePathAttributes(cmYang.teDefaultMetric(), TePathAttributes(cmYang.teDefaultMetric(),
cmYang.performanceMetric() == null ? null : cmYang.performanceMetric() == null ? null :
(cmYang.performanceMetric().measurement() == null ? null : (cmYang.performanceMetric().measurement() == null ? null :
cmYang.performanceMetric().measurement().unidirectionalDelay()), cmYang.performanceMetric().measurement().unidirectionalDelay()),
srlgs); srlgs);
ConnectivityMatrix coreCm = new ConnectivityMatrix(cmYang.id(), ConnectivityMatrix coreCm = new ConnectivityMatrix(cmYang.id(),
from, from,
@ -602,7 +570,7 @@ public final class NodeConverter {
// TODO: retrieve the details of tunnel termiantion points from yang to te // TODO: retrieve the details of tunnel termiantion points from yang to te
private static Map<Long, org.onosproject.tetopology.management.api.node. private static Map<Long, org.onosproject.tetopology.management.api.node.
TunnelTerminationPoint> yang2TeSubsystemTtp(List<TunnelTerminationPoint> ttps, Node yangNode) { TunnelTerminationPoint> yang2TeSubsystemTtp(List<TunnelTerminationPoint> ttps, Node yangNode) {
Map<Long, org.onosproject.tetopology.management.api.node.TunnelTerminationPoint> ttpsMap = Maps Map<Long, org.onosproject.tetopology.management.api.node.TunnelTerminationPoint> ttpsMap = Maps
.newHashMap(); .newHashMap();
for (TunnelTerminationPoint ttpYang : ttps) { for (TunnelTerminationPoint ttpYang : ttps) {
@ -641,7 +609,7 @@ public final class NodeConverter {
&& !tpItem.yangAugmentedInfoMap().isEmpty()) { && !tpItem.yangAugmentedInfoMap().isEmpty()) {
AugmentedNtTerminationPoint yangTpAugment = AugmentedNtTerminationPoint yangTpAugment =
(AugmentedNtTerminationPoint) tpItem (AugmentedNtTerminationPoint) tpItem
.yangAugmentedInfo(AugmentedNtTerminationPoint.class); .yangAugmentedInfo(AugmentedNtTerminationPoint.class);
if (yangTpAugment.te() != null && yangTpAugment.te().teTpId() != null) { if (yangTpAugment.te() != null && yangTpAugment.te().teTpId() != null) {
elt = new TeLinkId(Long.valueOf(yangTpAugment.te().teTpId().toString())); elt = new TeLinkId(Long.valueOf(yangTpAugment.te().teTpId().toString()));
break; break;
@ -655,7 +623,7 @@ public final class NodeConverter {
} }
} }
TePathAttributes teAttributes = null; // how to find these TePathAttributes teAttributes = null; // how to find these
// attributes from ttpYang? // attributes from ttpYang?
UnderlayAbstractPath underlayPath = null; // how to find underlayAbstractPath from ttpYang? UnderlayAbstractPath underlayPath = null; // how to find underlayAbstractPath from ttpYang?
LocalLinkConnectivity llc = new LocalLinkConnectivity(eltList, LocalLinkConnectivity llc = new LocalLinkConnectivity(eltList,
flags, flags,
@ -666,15 +634,16 @@ public final class NodeConverter {
float[] availAdaptBandwidth = null; // how to find availableBandwidth? float[] availAdaptBandwidth = null; // how to find availableBandwidth?
org.onosproject.tetopology.management.api.node. org.onosproject.tetopology.management.api.node.
TunnelTerminationPoint ttpTe = new TunnelTerminationPoint ttpTe = new
org.onosproject.tetopology.management.api.node. org.onosproject.tetopology.management.api.node.
DefaultTunnelTerminationPoint(ByteUtils.bytesToLong(ttpYang.tunnelTpId()), DefaultTunnelTerminationPoint(ByteUtils.bytesToLong(ttpYang.tunnelTpId()),
switchingLayer, switchingLayer,
encodingLayer, encodingLayer,
flags, flags,
interLayerLockList, interLayerLockList,
localLinkConnectivityList, localLinkConnectivityList,
availAdaptBandwidth); availAdaptBandwidth,
null);
ttpsMap.put(ByteUtils.bytesToLong(ttpYang.tunnelTpId()), ttpTe); ttpsMap.put(ByteUtils.bytesToLong(ttpYang.tunnelTpId()), ttpTe);
} }
@ -711,28 +680,31 @@ public final class NodeConverter {
List<Long> teTpIds = Lists.newArrayList(); List<Long> teTpIds = Lists.newArrayList();
// ********************************************** to find teLinkIds // ********************************************** 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)) { if (MapUtils.isNotEmpty(teTps)) {
for (Map.Entry<KeyId, TerminationPoint> entry : teTps.entrySet()) { for (Map.Entry<KeyId, TerminationPoint> entry : teTps.entrySet()) {
if (entry.getValue().teTpId() != null) { if (entry.getValue().teTpId() != null) {
teTpIds.add(entry.getValue().teTpId()); teTpIds.add(entry.getValue().teTpId());
teLinkIds.add(entry.getValue().teTpId());
} }
} }
} }
// ********************************************** to find teTpIds // ********************************************** to find teTpIds
if (yangNode.yangAugmentedInfoMap() != null // if (yangNode.yangAugmentedInfoMap() != null
&& !yangNode.yangAugmentedInfoMap().isEmpty()) { // && !yangNode.yangAugmentedInfoMap().isEmpty()) {
//
AugmentedNdNode yangTpNodeAugment = (AugmentedNdNode) yangNode // AugmentedNdNode yangTpNodeAugment = (AugmentedNdNode) yangNode
.yangAugmentedInfo(AugmentedNdNode.class); // .yangAugmentedInfo(AugmentedNdNode.class);
//
if (yangTpNodeAugment.terminationPoint() != null) { // if (yangTpNodeAugment.terminationPoint() != null) {
for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology // for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology
.rev20151208.ietfnetworktopology.networks.network.node.augmentedndnode.TerminationPoint // .rev20151208.ietfnetworktopology.networks.network.node.augmentedndnode.TerminationPoint
yangTpnode : yangTpNodeAugment.terminationPoint()) { // yangTpnode : yangTpNodeAugment.terminationPoint()) {
teTpIds.add(Long.valueOf(yangTpnode.tpId().uri().string())); // teTpIds.add(Long.valueOf(yangTpnode.tpId().uri().string()));
} // }
} // }
} // }
// ********************************************** // **********************************************
Config ynodeAugCfg = yangNodeAugTe.config(); Config ynodeAugCfg = yangNodeAugTe.config();
@ -744,22 +716,22 @@ public final class NodeConverter {
if (teNodeAttr.underlayTopology() != null) { if (teNodeAttr.underlayTopology() != null) {
underlayTopologyIdId = yang2TeSubsystemNodeUnderlayTopology(teNodeAttr underlayTopologyIdId = yang2TeSubsystemNodeUnderlayTopology(teNodeAttr
.underlayTopology()); .underlayTopology());
} }
BitSet flags = new BitSet(); BitSet flags = new BitSet();
if (teNodeAttr.isAbstract()) { if (teNodeAttr.isAbstract()) {
flags.set(TeNode.BIT_ABSTRACT); flags.set(TeNode.BIT_ABSTRACT);
} }
teData = new CommonNodeData( teData = new CommonNodeData(
null, // teNodeAttr.name().string(), null, // teNodeAttr.name().string(),
EnumConverter.yang2TeSubsystemAdminStatus(teNodeAttr.adminStatus()), EnumConverter.yang2TeSubsystemAdminStatus(teNodeAttr.adminStatus()),
EnumConverter.yang2TeSubsystemOpStatus(yangNodeAugTe.state().operStatus()), EnumConverter.yang2TeSubsystemOpStatus(yangNodeAugTe.state().operStatus()),
flags); flags);
if (teNodeAttr.connectivityMatrix() != null) { if (teNodeAttr.connectivityMatrix() != null) {
connMatrices = yang2TeSubsystemNodeConnectivityMatrix(yangNetworkId.uri().toString(), connMatrices = yang2TeSubsystemNodeConnectivityMatrix(yangNetworkId.uri().toString(),
yangNodeId.uri().toString(), yangNodeId.uri().toString(),
teNodeAttr.connectivityMatrix()); teNodeAttr.connectivityMatrix());
} }
} }
@ -801,7 +773,7 @@ public final class NodeConverter {
* to its corresponding YANG Object (YO) format. * to its corresponding YANG Object (YO) format.
* *
* @param eventType Node event type * @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 * @return YANG Object converted from nodeData
*/ */
public static TeNodeEvent teNetworkNode2yangTeNodeEvent(TeTopologyEventTypeEnum eventType, 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. org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
rev20160708.ietftetopology.tenodeconfigattributesnotification. rev20160708.ietftetopology.tenodeconfigattributesnotification.
TeNodeAttributes teNodeAttributes = node == null ? null TeNodeAttributes teNodeAttributes = node == null ? null
: teNode2YangTeNodeAttributes(node.teNode()); : teNode2YangTeNodeAttributes(node.teNode());
builder.teNodeAttributes(teNodeAttributes); builder.teNodeAttributes(teNodeAttributes);
return builder.build(); return builder.build();
@ -841,31 +813,31 @@ public final class NodeConverter {
if (teNode.connectivityMatrices() != null) { if (teNode.connectivityMatrices() != null) {
org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
.tenodeconnectivitymatrixabs.DefaultConnectivityMatrix .tenodeconnectivitymatrixabs.DefaultConnectivityMatrix
.ConnectivityMatrixBuilder connectivityMatrixConfigBuilder = org.onosproject.yang.gen.v1.urn.ietf. .ConnectivityMatrixBuilder connectivityMatrixConfigBuilder = org.onosproject.yang.gen.v1.urn.ietf.
params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrixabs. params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology.tenodeconnectivitymatrixabs.
DefaultConnectivityMatrix.builder(); DefaultConnectivityMatrix.builder();
for (Map.Entry<Long, ConnectivityMatrix> teCmEntry : for (Map.Entry<Long, ConnectivityMatrix> teCmEntry :
teNode.connectivityMatrices().entrySet()) { teNode.connectivityMatrices().entrySet()) {
connectivityMatrixConfigBuilder = connectivityMatrixConfigBuilder connectivityMatrixConfigBuilder = connectivityMatrixConfigBuilder
.id(teCmEntry.getKey()) .id(teCmEntry.getKey())
.isAllowed(!teCmEntry.getValue().flags() .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 .from(new org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
.ietftetopology.tenodeconnectivitymatrixabs.connectivitymatrix.DefaultFrom .ietftetopology.tenodeconnectivitymatrixabs.connectivitymatrix.DefaultFrom
.FromBuilder() // TODO: for now, assuming that there is .FromBuilder() // TODO: for now, assuming that there is
// only one 'from', and mergingList is empty // only one 'from', and mergingList is empty
.tpRef(teCmEntry.getValue().from()) .tpRef(teCmEntry.getValue().from())
.build()) .build())
.to(new org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708 .to(new org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
.ietftetopology.tenodeconnectivitymatrixabs.connectivitymatrix .ietftetopology.tenodeconnectivitymatrixabs.connectivitymatrix
.DefaultTo.ToBuilder() // TODO: for now, assuming that there is only .DefaultTo.ToBuilder() // TODO: for now, assuming that there is only
// one item in constrainingElements list // one item in constrainingElements list
.tpRef(teCmEntry.getValue().constrainingElements().get(0)) .tpRef(teCmEntry.getValue().constrainingElements().get(0))
.build()); .build());
attrBuilder = attrBuilder attrBuilder = attrBuilder
.addToConnectivityMatrix(connectivityMatrixConfigBuilder .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 * @param yangNodeEvent YANG network node notification event
* @return TE network node key * @return TE network node key
@ -896,7 +869,7 @@ public final class NodeConverter {
/** /**
* Converts YangNode event to NetworkNode. * Converts YangNode event to NetworkNode.
* *
* @param yangNodeEvent yangNodeEvent * @param yangNodeEvent yangNodeEvent
* @param teTopologyService teTopologyService * @param teTopologyService teTopologyService
* @return NetworkNode * @return NetworkNode
*/ */
@ -992,12 +965,12 @@ public final class NodeConverter {
} }
private static ConnectivityMatrix yangNodeEvent2TeConnectivityMatrix(org.onosproject.yang.gen.v1. private static ConnectivityMatrix yangNodeEvent2TeConnectivityMatrix(org.onosproject.yang.gen.v1.
urn.ietf.params.xml.ns.yang. urn.ietf.params.xml.ns.yang.
ietf.te.topology ietf.te.topology
.rev20160708.ietftetopology .rev20160708.ietftetopology
.tenodeconnectivitymatrixabs .tenodeconnectivitymatrixabs
.ConnectivityMatrix yangConnMatrix, .ConnectivityMatrix yangConnMatrix,
ConnectivityMatrix oldTeConnMatrix) { ConnectivityMatrix oldTeConnMatrix) {
long id = yangConnMatrix.id(); long id = yangConnMatrix.id();
ElementType from = new TeLinkId((long) (yangConnMatrix.from().tpRef())); ElementType from = new TeLinkId((long) (yangConnMatrix.from().tpRef()));

View File

@ -158,4 +158,11 @@ public interface TeTopologyService
* @return value of termination point key * @return value of termination point key
*/ */
TerminationPointKey terminationPointKey(TeLinkTpGlobalKey teTpKey); TerminationPointKey terminationPointKey(TeLinkTpGlobalKey teTpKey);
/**
* Returns the TE controller global identification.
*
* @return value of controller id
*/
long teContollerId();
} }

View File

@ -15,16 +15,17 @@
*/ */
package org.onosproject.tetopology.management.api.node; 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.MoreObjects;
import com.google.common.base.Objects; import com.google.common.base.Objects;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists; 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. * Default implementation of a tunnel termination point.
@ -37,6 +38,7 @@ public class DefaultTunnelTerminationPoint implements TunnelTerminationPoint {
private final List<Long> interLayerLockList; private final List<Long> interLayerLockList;
private final List<LocalLinkConnectivity> localLinkConnectivityList; private final List<LocalLinkConnectivity> localLinkConnectivityList;
private final float[] availAdaptBandwidth; private final float[] availAdaptBandwidth;
private final TtpKey supportTtpKey;
/** /**
* Create a tunnel termination point. * Create a tunnel termination point.
@ -50,6 +52,7 @@ public class DefaultTunnelTerminationPoint implements TunnelTerminationPoint {
* @param localLinkConnectivityList the local link connectivity list * @param localLinkConnectivityList the local link connectivity list
* @param availAdaptBandwidth the remaining adaptation bandwidth * @param availAdaptBandwidth the remaining adaptation bandwidth
* at each priority level * at each priority level
* @param supportTtpKey supporting TTP key from underlay topology
*/ */
public DefaultTunnelTerminationPoint(long ttpId, public DefaultTunnelTerminationPoint(long ttpId,
SwitchingType switchingLayer, SwitchingType switchingLayer,
@ -57,7 +60,8 @@ public class DefaultTunnelTerminationPoint implements TunnelTerminationPoint {
BitSet flags, BitSet flags,
List<Long> interLayerLockList, List<Long> interLayerLockList,
List<LocalLinkConnectivity> localLinkConnectivityList, List<LocalLinkConnectivity> localLinkConnectivityList,
float[] availAdaptBandwidth) { float[] availAdaptBandwidth,
TtpKey supportTtpKey) {
this.ttpId = ttpId; this.ttpId = ttpId;
this.switchingLayer = switchingLayer; this.switchingLayer = switchingLayer;
this.encodingLayer = encodingLayer; this.encodingLayer = encodingLayer;
@ -69,6 +73,7 @@ public class DefaultTunnelTerminationPoint implements TunnelTerminationPoint {
this.availAdaptBandwidth = availAdaptBandwidth != null ? this.availAdaptBandwidth = availAdaptBandwidth != null ?
Arrays.copyOf(availAdaptBandwidth, Arrays.copyOf(availAdaptBandwidth,
availAdaptBandwidth.length) : null; availAdaptBandwidth.length) : null;
this.supportTtpKey = supportTtpKey;
} }
@Override @Override
@ -115,11 +120,16 @@ public class DefaultTunnelTerminationPoint implements TunnelTerminationPoint {
return Arrays.copyOf(availAdaptBandwidth, availAdaptBandwidth.length); return Arrays.copyOf(availAdaptBandwidth, availAdaptBandwidth.length);
} }
@Override
public TtpKey supportingTtpId() {
return supportTtpKey;
}
@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hashCode(ttpId, switchingLayer, encodingLayer, flags, return Objects.hashCode(ttpId, switchingLayer, encodingLayer, flags,
interLayerLockList, localLinkConnectivityList, interLayerLockList, localLinkConnectivityList,
Arrays.hashCode(availAdaptBandwidth)); Arrays.hashCode(availAdaptBandwidth), supportTtpKey);
} }
@Override @Override
@ -135,7 +145,8 @@ public class DefaultTunnelTerminationPoint implements TunnelTerminationPoint {
Objects.equal(flags, that.flags) && Objects.equal(flags, that.flags) &&
Objects.equal(interLayerLockList, that.interLayerLockList) && Objects.equal(interLayerLockList, that.interLayerLockList) &&
Objects.equal(localLinkConnectivityList, that.localLinkConnectivityList) && Objects.equal(localLinkConnectivityList, that.localLinkConnectivityList) &&
Arrays.equals(availAdaptBandwidth, that.availAdaptBandwidth); Arrays.equals(availAdaptBandwidth, that.availAdaptBandwidth) &&
Objects.equal(supportTtpKey, that.supportTtpKey);
} }
return false; return false;
} }
@ -150,6 +161,8 @@ public class DefaultTunnelTerminationPoint implements TunnelTerminationPoint {
.add("interLayerLockList", interLayerLockList) .add("interLayerLockList", interLayerLockList)
.add("localLinkConnectivityList", localLinkConnectivityList) .add("localLinkConnectivityList", localLinkConnectivityList)
.add("availAdaptBandwidth", availAdaptBandwidth) .add("availAdaptBandwidth", availAdaptBandwidth)
.add("supportTtpKey", supportTtpKey)
.toString(); .toString();
} }
} }

View File

@ -15,12 +15,12 @@
*/ */
package org.onosproject.tetopology.management.api.node; 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.BitSet;
import java.util.List; import java.util.List;
import org.onosproject.tetopology.management.api.EncodingType;
import org.onosproject.tetopology.management.api.SwitchingType;
/** /**
* Representation of a tunnel termination point. * Representation of a tunnel termination point.
*/ */
@ -88,4 +88,11 @@ public interface TunnelTerminationPoint {
* @return list of available adaptation bandwidth * @return list of available adaptation bandwidth
*/ */
float[] availAdaptBandwidth(); float[] availAdaptBandwidth();
/**
* Returns the supporting TTP identifier.
*
* @return the supporting TTP key
*/
TtpKey supportingTtpId();
} }

View File

@ -39,6 +39,7 @@ import java.util.BitSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.BlockingQueue; import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.MapUtils;
@ -137,7 +138,7 @@ public class DistributedTeTopologyStore
implements TeTopologyStore { implements TeTopologyStore {
private static final String STORE_NAME = "TE_NETWORK_TOPOLOGY_STORE"; private static final String STORE_NAME = "TE_NETWORK_TOPOLOGY_STORE";
private static final String TETOPOLOGYKEY_INTERNALTETOPOLOGY = "TeTopologyKey-InternalTeTopology"; 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 TENODEKEY_INTERNALTENODE = "TeNodeKey-InternalTeNode";
private static final String CONNMATRIXKEY_CONNECTIVITYMATRIX = "ConnMatrixKey-ConnectivityMatrix"; private static final String CONNMATRIXKEY_CONNECTIVITYMATRIX = "ConnMatrixKey-ConnectivityMatrix";
private static final String NETWORKNODEKEY_INTERNALNETWORKNODE = "NetworkNodeKey-InternalNetworkNode"; private static final String NETWORKNODEKEY_INTERNALNETWORKNODE = "NetworkNodeKey-InternalNetworkNode";
@ -199,7 +200,8 @@ public class DistributedTeTopologyStore
// Track termination point keys by TE termination point Key // Track termination point keys by TE termination point Key
private ConsistentMap<TeLinkTpGlobalKey, TerminationPointKey> tpKeyConsistentMap; private ConsistentMap<TeLinkTpGlobalKey, TerminationPointKey> tpKeyConsistentMap;
private Map<TeLinkTpGlobalKey, TerminationPointKey> tpKeyMap; private Map<TeLinkTpGlobalKey, TerminationPointKey> tpKeyMap;
private BlockingQueue<TeTopologyMapEvent> mapEventQueue; private final BlockingQueue<TeTopologyMapEvent> mapEventQueue = new LinkedBlockingQueue<>();
private long providerId; private long providerId;
private static final Serializer TETOPOLOGY_SERIALIZER = Serializer private static final Serializer TETOPOLOGY_SERIALIZER = Serializer
.using(new KryoNamespace.Builder().register(KryoNamespaces.API) .using(new KryoNamespace.Builder().register(KryoNamespaces.API)
@ -373,6 +375,7 @@ public class DistributedTeTopologyStore
tpKeyMap.clear(); tpKeyMap.clear();
ttpConsistentMap.destroy(); ttpConsistentMap.destroy();
ttpMap.clear(); ttpMap.clear();
mapEventQueue.clear();
log.info("Stopped"); log.info("Stopped");
} }
@ -454,10 +457,6 @@ public class DistributedTeTopologyStore
private class InternalTeNodeListener implements MapEventListener<TeNodeKey, InternalTeNode> { private class InternalTeNodeListener implements MapEventListener<TeNodeKey, InternalTeNode> {
@Override @Override
public void event(MapEvent<TeNodeKey, InternalTeNode> event) { public void event(MapEvent<TeNodeKey, InternalTeNode> event) {
// Event should be ignored when the topology is not there.
if (teTopologyMap.get(event.key().teTopologyKey()) == null) {
return;
}
Type type = null; Type type = null;
switch (event.type()) { switch (event.type()) {
case INSERT: case INSERT:
@ -499,10 +498,6 @@ public class DistributedTeTopologyStore
private class InternalNetworkNodeListener implements MapEventListener<NetworkNodeKey, InternalNetworkNode> { private class InternalNetworkNodeListener implements MapEventListener<NetworkNodeKey, InternalNetworkNode> {
@Override @Override
public void event(MapEvent<NetworkNodeKey, InternalNetworkNode> event) { public void event(MapEvent<NetworkNodeKey, InternalNetworkNode> event) {
// Event should be ignored when the network is not there.
if (networkMap.get(event.key().networkId()) == null) {
return;
}
Type type = null; Type type = null;
switch (event.type()) { switch (event.type()) {
case INSERT: case INSERT:
@ -544,11 +539,6 @@ public class DistributedTeTopologyStore
private class InternalTeLinkListener implements MapEventListener<TeLinkTpGlobalKey, InternalTeLink> { private class InternalTeLinkListener implements MapEventListener<TeLinkTpGlobalKey, InternalTeLink> {
@Override @Override
public void event(MapEvent<TeLinkTpGlobalKey, InternalTeLink> event) { public void event(MapEvent<TeLinkTpGlobalKey, InternalTeLink> 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; Type type = null;
switch (event.type()) { switch (event.type()) {
case INSERT: case INSERT:
@ -589,10 +579,6 @@ public class DistributedTeTopologyStore
private class InternalNetworkLinkListener implements MapEventListener<NetworkLinkKey, InternalNetworkLink> { private class InternalNetworkLinkListener implements MapEventListener<NetworkLinkKey, InternalNetworkLink> {
@Override @Override
public void event(MapEvent<NetworkLinkKey, InternalNetworkLink> event) { public void event(MapEvent<NetworkLinkKey, InternalNetworkLink> event) {
// Event should be ignored when the network is not there.
if (networkMap.get(event.key().networkId()) == null) {
return;
}
Type type = null; Type type = null;
switch (event.type()) { switch (event.type()) {
case INSERT: case INSERT:
@ -819,6 +805,7 @@ public class DistributedTeTopologyStore
@Override @Override
public void updateNetwork(Network network) { public void updateNetwork(Network network) {
log.debug("updateNetwork {}", network);
InternalNetwork curNetwork = networkMap.get(network.networkId()); InternalNetwork curNetwork = networkMap.get(network.networkId());
TeTopologyKey topoKey = null; TeTopologyKey topoKey = null;
if (network.teTopologyId() != null) { if (network.teTopologyId() != null) {
@ -1415,8 +1402,8 @@ public class DistributedTeTopologyStore
} }
@Override @Override
public void setMapEventQueue(BlockingQueue<TeTopologyMapEvent> queue) { public BlockingQueue<TeTopologyMapEvent> mapEventQueue() {
mapEventQueue = queue; return mapEventQueue;
} }
@Override @Override

View File

@ -31,12 +31,12 @@ public class TeTopologyConfig extends Config<ApplicationId> {
private static final String TENODE_ID_END = "tenode-id-end"; private static final String TENODE_ID_END = "tenode-id-end";
/** /**
* Retrieves TE topology provider identifier. * Retrieves TE topology provider identifier.
* *
* @return provider Id * @return provider Id
* @throws ConfigException if the parameters are not correctly configured * @throws ConfigException if the parameters are not correctly configured
* or conversion of the parameters fails * or conversion of the parameters fails
*/ */
public long providerId() throws ConfigException { public long providerId() throws ConfigException {
try { try {
return object.path(PROVIDER_ID).asLong(); return object.path(PROVIDER_ID).asLong();
@ -45,49 +45,49 @@ public class TeTopologyConfig extends Config<ApplicationId> {
} }
} }
/** /**
* Retrieves TE node starting IPv4 address. * Retrieves TE node starting IPv4 address.
* *
* @return the IPv4 address * @return the IPv4 address
* @throws ConfigException if the parameters are not correctly configured * @throws ConfigException if the parameters are not correctly configured
* or conversion of the parameters fails * or conversion of the parameters fails
*/ */
public Ip4Address teNodeIpStart() throws ConfigException { public Ip4Address teNodeIpStart() throws ConfigException {
try { try {
return Ip4Address.valueOf(object.path(TENODE_ID_START).asText()); return Ip4Address.valueOf(object.path(TENODE_ID_START).asText());
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
throw new ConfigException(CONFIG_VALUE_ERROR, e); throw new ConfigException(CONFIG_VALUE_ERROR, e);
} }
} }
/** /**
* Retrieves TE node end IPv4 address. * Retrieves TE node end IPv4 address.
* *
* @return the IPv4 address * @return the IPv4 address
* @throws ConfigException if the parameters are not correctly configured or * @throws ConfigException if the parameters are not correctly configured
* conversion of the parameters fails * or conversion of the parameters fails
*/ */
public Ip4Address teNodeIpEnd() throws ConfigException { public Ip4Address teNodeIpEnd() throws ConfigException {
try { try {
return Ip4Address.valueOf(object.path(TENODE_ID_END).asText()); return Ip4Address.valueOf(object.path(TENODE_ID_END).asText());
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
throw new ConfigException(CONFIG_VALUE_ERROR, e); throw new ConfigException(CONFIG_VALUE_ERROR, e);
} }
} }
/** /**
* Retrieves if this is a MDSC(Multi-Domain Super Controller). * Retrieves if this is a MDSC(Multi-Domain Super Controller).
* *
* @return MDSC value * @return MDSC value
* @throws ConfigException if the parameters are not correctly configured or * @throws ConfigException if the parameters are not correctly configured or
* conversion of the parameters fails * conversion of the parameters fails
*/ */
public String mdsc() throws ConfigException { public String mdsc() throws ConfigException {
try { try {
return object.path(MDSC).asText(); return object.path(MDSC).asText();
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
throw new ConfigException(CONFIG_VALUE_ERROR, e); throw new ConfigException(CONFIG_VALUE_ERROR, e);
} }
} }
} }

View File

@ -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_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_ADDED;
import static org.onosproject.tetopology.management.api.TeTopologyEvent.Type.TE_TOPOLOGY_REMOVED; 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.linkBuilder;
import static org.onosproject.tetopology.management.impl.TeMgrUtil.networkBuilder; import static org.onosproject.tetopology.management.impl.TeMgrUtil.networkBuilder;
import static org.onosproject.tetopology.management.impl.TeMgrUtil.networkLinkKey; 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.BitSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils; 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.CommonNodeData;
import org.onosproject.tetopology.management.api.node.ConnectivityMatrix; import org.onosproject.tetopology.management.api.node.ConnectivityMatrix;
import org.onosproject.tetopology.management.api.node.DefaultTeNode; 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.NetworkNode;
import org.onosproject.tetopology.management.api.node.NetworkNodeEventSubject; import org.onosproject.tetopology.management.api.node.NetworkNodeEventSubject;
import org.onosproject.tetopology.management.api.node.NetworkNodeKey; import org.onosproject.tetopology.management.api.node.NetworkNodeKey;
@ -176,8 +176,6 @@ public class TeTopologyManager
public TeTopologyStore store; public TeTopologyStore store;
private TeTopologyStoreDelegate delegate = this::post; private TeTopologyStoreDelegate delegate = this::post;
private final BlockingQueue<TeTopologyEvent> eventQueue = new LinkedBlockingQueue<>();
private final BlockingQueue<TeTopologyMapEvent> mapEventQueue = new LinkedBlockingQueue<>();
private final ConfigFactory<ApplicationId, TeTopologyConfig> factory = private final ConfigFactory<ApplicationId, TeTopologyConfig> factory =
new ConfigFactory<ApplicationId, TeTopologyConfig>(APP_SUBJECT_FACTORY, new ConfigFactory<ApplicationId, TeTopologyConfig>(APP_SUBJECT_FACTORY,
TeTopologyConfig.class, TeTopologyConfig.class,
@ -205,7 +203,6 @@ public class TeTopologyManager
*/ */
public void activateBasics() { public void activateBasics() {
store.setDelegate(delegate); store.setDelegate(delegate);
store.setMapEventQueue(mapEventQueue);
store.setProviderId(providerId); store.setProviderId(providerId);
eventDispatcher.addSink(TeTopologyEvent.class, listenerRegistry); eventDispatcher.addSink(TeTopologyEvent.class, listenerRegistry);
} }
@ -238,7 +235,6 @@ public class TeTopologyManager
cfgService.unregisterConfigFactory(factory); cfgService.unregisterConfigFactory(factory);
executor.shutdownNow(); executor.shutdownNow();
executor = null; executor = null;
eventQueue.clear();
log.info("Stopped"); log.info("Stopped");
} }
@ -315,7 +311,7 @@ public class TeTopologyManager
public void run() { public void run() {
try { try {
TeTopologyMapEvent event; TeTopologyMapEvent event;
while ((event = mapEventQueue.take()) != null) { while ((event = store.mapEventQueue().take()) != null) {
switch (event.type()) { switch (event.type()) {
case TE_TOPOLOGY_ADDED: case TE_TOPOLOGY_ADDED:
case TE_TOPOLOGY_UPDATED: case TE_TOPOLOGY_UPDATED:
@ -335,6 +331,10 @@ public class TeTopologyManager
break; break;
case TE_NODE_ADDED: case TE_NODE_ADDED:
case TE_NODE_UPDATED: 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()); TeNode teNode = store.teNode(event.teNodeKey());
post(new TeTopologyEvent(event.type(), post(new TeTopologyEvent(event.type(),
new TeNodeEventSubject(event.teNodeKey(), teNode))); new TeNodeEventSubject(event.teNodeKey(), teNode)));
@ -344,6 +344,10 @@ public class TeTopologyManager
} }
break; break;
case TE_NODE_REMOVED: 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, post(new TeTopologyEvent(TE_NODE_REMOVED,
new TeNodeEventSubject(event.teNodeKey(), null))); new TeNodeEventSubject(event.teNodeKey(), null)));
if (mdsc && isCustomizedLearnedTopology(event.teNodeKey().teTopologyKey())) { if (mdsc && isCustomizedLearnedTopology(event.teNodeKey().teTopologyKey())) {
@ -352,6 +356,11 @@ public class TeTopologyManager
break; break;
case TE_LINK_ADDED: case TE_LINK_ADDED:
case TE_LINK_UPDATED: 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()); TeLink teLink = store.teLink(event.teLinkKey());
post(new TeTopologyEvent(event.type(), post(new TeTopologyEvent(event.type(),
new TeLinkEventSubject(event.teLinkKey(), teLink))); new TeLinkEventSubject(event.teLinkKey(), teLink)));
@ -362,6 +371,11 @@ public class TeTopologyManager
} }
break; break;
case TE_LINK_REMOVED: 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, post(new TeTopologyEvent(TE_LINK_REMOVED,
new TeLinkEventSubject(event.teLinkKey(), null))); new TeLinkEventSubject(event.teLinkKey(), null)));
if (mdsc && isCustomizedLearnedTopology(event.teLinkKey().teTopologyKey())) { if (mdsc && isCustomizedLearnedTopology(event.teLinkKey().teTopologyKey())) {
@ -382,21 +396,37 @@ public class TeTopologyManager
break; break;
case NODE_ADDED: case NODE_ADDED:
case NODE_UPDATED: 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()); NetworkNode node = store.networkNode(event.networkNodeKey());
post(new TeTopologyEvent(event.type(), post(new TeTopologyEvent(event.type(),
new NetworkNodeEventSubject(event.networkNodeKey(), node))); new NetworkNodeEventSubject(event.networkNodeKey(), node)));
break; break;
case NODE_REMOVED: 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, post(new TeTopologyEvent(NODE_REMOVED,
new NetworkNodeEventSubject(event.networkNodeKey(), null))); new NetworkNodeEventSubject(event.networkNodeKey(), null)));
break; break;
case LINK_ADDED: case LINK_ADDED:
case LINK_UPDATED: 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()); NetworkLink link = store.networkLink(event.networkLinkKey());
post(new TeTopologyEvent(event.type(), post(new TeTopologyEvent(event.type(),
new NetworkLinkEventSubject(event.networkLinkKey(), link))); new NetworkLinkEventSubject(event.networkLinkKey(), link)));
break; break;
case LINK_REMOVED: 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, post(new TeTopologyEvent(LINK_REMOVED,
new NetworkLinkEventSubject(event.networkLinkKey(), null))); new NetworkLinkEventSubject(event.networkLinkKey(), null)));
break; break;
@ -452,7 +482,21 @@ public class TeTopologyManager
srcNode.opStatus(), srcNode.flags()); // No change srcNode.opStatus(), srcNode.flags()); // No change
Map<Long, ConnectivityMatrix> connMatrices = srcNode.connectivityMatrices(); Map<Long, ConnectivityMatrix> connMatrices = srcNode.connectivityMatrices();
List<Long> teLinkIds = srcNode.teLinkIds(); // No change List<Long> teLinkIds = srcNode.teLinkIds(); // No change
Map<Long, TunnelTerminationPoint> ttps = srcNode.tunnelTerminationPoints(); Map<Long, TunnelTerminationPoint> ttps = null;
if (MapUtils.isNotEmpty(srcNode.tunnelTerminationPoints())) {
ttps = Maps.newHashMap();
for (Map.Entry<Long, TunnelTerminationPoint> 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<Long> teTpIds = srcNode.teTerminationPointIds(); // No change List<Long> teTpIds = srcNode.teTerminationPointIds(); // No change
DefaultTeNode newNode = new DefaultTeNode(mergedTeNodeId, underlayTopologyId, DefaultTeNode newNode = new DefaultTeNode(mergedTeNodeId, underlayTopologyId,
supportTeNodeId, sourceTeNodeId, common, connMatrices, teLinkIds, supportTeNodeId, sourceTeNodeId, common, connMatrices, teLinkIds,
@ -504,8 +548,21 @@ public class TeTopologyManager
exLink.maxAvailLspBandwidth(), exLink.maxAvailLspBandwidth(),
exLink.minAvailLspBandwidth(), exLink.minAvailLspBandwidth(),
exLink.oduResource()); 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(), CommonLinkData common = new CommonLinkData(exLink.adminStatus(), exLink.opStatus(),
exLink.flags(), exLink.switchingLayer(), exLink.encodingLayer(), flags, exLink.switchingLayer(), exLink.encodingLayer(),
externalLink, underlayPath, teAttributes, externalLink, underlayPath, teAttributes,
exLink.administrativeGroup(), exLink.interLayerLocks(), exLink.administrativeGroup(), exLink.interLayerLocks(),
bandwidth); bandwidth);
@ -793,19 +850,18 @@ public class TeTopologyManager
teNodeIpEnd = cfgService.getConfig(appId, TeTopologyConfig.class) teNodeIpEnd = cfgService.getConfig(appId, TeTopologyConfig.class)
.teNodeIpEnd(); .teNodeIpEnd();
mdsc = cfgService.getConfig(appId, TeTopologyConfig.class) mdsc = cfgService.getConfig(appId, TeTopologyConfig.class)
.mdsc().equalsIgnoreCase(MDSC_MODE); .mdsc().equals(MDSC_MODE);
nextTeNodeId = teNodeIpStart.toInt(); nextTeNodeId = teNodeIpStart.toInt();
} catch (ConfigException e) { } catch (ConfigException e) {
log.error("Configuration error {}", e); log.error("Configuration error {}", e);
} }
} }
@Override @Override
public boolean isRelevant(NetworkConfigEvent event) { public boolean isRelevant(NetworkConfigEvent event) {
return event.configClass().equals(TeTopologyConfig.class) && return event.configClass().equals(TeTopologyConfig.class) &&
(event.type() == CONFIG_ADDED || (event.type() == CONFIG_ADDED ||
event.type() == CONFIG_UPDATED); event.type() == CONFIG_UPDATED);
} }
} }
@ -826,6 +882,7 @@ public class TeTopologyManager
@Override @Override
public TeTopology teTopology(TeTopologyKey topologyId) { public TeTopology teTopology(TeTopologyKey topologyId) {
if (mergedTopology != null && if (mergedTopology != null &&
topologyId != null &&
topologyId.equals(mergedTopologyKey)) { topologyId.equals(mergedTopologyKey)) {
return mergedTopology; return mergedTopology;
} }
@ -955,4 +1012,9 @@ public class TeTopologyManager
KeyId.keyId(Long.toString(teTpKey.teLinkTpId()))) : KeyId.keyId(Long.toString(teTpKey.teLinkTpId()))) :
store.terminationPointKey(teTpKey); store.terminationPointKey(teTpKey);
} }
@Override
public long teContollerId() {
return providerId;
}
} }

View File

@ -274,11 +274,11 @@ public interface TeTopologyStore
void setNextTeNodeId(TeTopologyKey topologyKey, long nextNodeId); 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<TeTopologyMapEvent> queue); BlockingQueue<TeTopologyMapEvent> mapEventQueue();
/** /**
* Sets the provider ID. * Sets the provider ID.

View File

@ -113,7 +113,7 @@ public final class DefaultBuilder {
EncodingType.LSP_ENCODING_ODUK, EncodingType.LSP_ENCODING_ODUK,
new BitSet(TeConstants.FLAG_MAX_BITS), new BitSet(TeConstants.FLAG_MAX_BITS),
null, null, null, null,
ODU2BW); //10G for ODU2 ODU2BW, null); //10G for ODU2
} }
private static TerminationPoint tpBuilder(long teTpId) { private static TerminationPoint tpBuilder(long teTpId) {

View File

@ -1025,13 +1025,14 @@ public class SimpleTeTopologyStore
return tpKeyMap.get(teTpKey); return tpKeyMap.get(teTpKey);
} }
@Override
public void setMapEventQueue(BlockingQueue<TeTopologyMapEvent> queue) {
}
@Override @Override
public void setProviderId(long providerId) { public void setProviderId(long providerId) {
this.providerId = providerId; this.providerId = providerId;
} }
@Override
public BlockingQueue<TeTopologyMapEvent> mapEventQueue() {
return null;
}
} }

View File

@ -128,6 +128,7 @@ public class TeTopologyManagerTest {
.teNode(new TeNodeKey(DefaultBuilder.teTopologyKey(), .teNode(new TeNodeKey(DefaultBuilder.teTopologyKey(),
DefaultBuilder.teNode().teNodeId())); DefaultBuilder.teNode().teNodeId()));
assertNotNull("TeNode should be found", teNode); assertNotNull("TeNode should be found", teNode);
assertTrue("TE node should be identical", teNode.equals(DefaultBuilder.teNode()));
assertTrue("Number of TTPs should be 1", assertTrue("Number of TTPs should be 1",
teNode.tunnelTerminationPoints().size() == 1); teNode.tunnelTerminationPoints().size() == 1);
TeLink teLink = service TeLink teLink = service

View File

@ -275,7 +275,7 @@ public class TeTopologyRestconfProvider extends AbstractProvider
//Convert the YO to TE Core data and update TE Core. //Convert the YO to TE Core data and update TE Core.
for (Network nw : ietfNetwork.networks().network()) { for (Network nw : ietfNetwork.networks().network()) {
topologyProviderService.networkUpdated( topologyProviderService.networkUpdated(
NetworkConverter.yang2TeSubsystemNetwork(nw, ietfNetwork.networks())); NetworkConverter.yang2TeSubsystemNetwork(nw, ietfNetwork.networks(), deviceId));
} }
} }