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