RESTCONF notification changes
* Added a callback function mechanism to the RESTCONF notification
listener. Applications can register their callbacks to a listener.
This is to allow multiple SB providers share one generic listener.
while still being able to process app-specific events.
* Created a default RESTCONF notification listener implementation.
* Refactored TE provider code to allow TE-topology and TE-tunnel share one
RESTCONF event listener
Change-Id: I26dc4972683fcda3eefacde131353312809aa95e
diff --git a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/LinkConverter.java b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/LinkConverter.java
index 933b9be..c567667 100644
--- a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/LinkConverter.java
+++ b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/LinkConverter.java
@@ -15,13 +15,7 @@
*/
package org.onosproject.teyang.utils.topology;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.BitSet;
-import java.util.List;
-
+import com.google.common.collect.Lists;
import org.onlab.packet.Ip4Address;
import org.onosproject.tetopology.management.api.KeyId;
import org.onosproject.tetopology.management.api.TeStatus;
@@ -51,87 +45,132 @@
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.tenodeaugment.Te;
-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
+ .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.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 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes
+ .tetopologyeventtype.TeTopologyEventTypeEnum;
-import com.google.common.collect.Lists;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.BitSet;
+import java.util.List;
+
+import static com.google.common.base.Preconditions.checkNotNull;
/**
@@ -155,22 +194,23 @@
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.
*
@@ -194,7 +234,7 @@
if (teLink.tunnelProtectionType() != null) {
attrBuilder = attrBuilder
.linkProtectionType(teSubsystem2YangLinkProtectionType(teLink
- .tunnelProtectionType()));
+ .tunnelProtectionType()));
}
attrBuilder = attrBuilder.teDefaultMetric(teLink.cost());
@@ -217,15 +257,15 @@
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());
}
@@ -235,8 +275,8 @@
for (float f : teLink.availBandwidth()) {
UnreservedBandwidthBuilder urBuilder =
DefaultUnreservedBandwidth.builder()
- .bandwidth(BigDecimal.valueOf(f))
- .priority(i);
+ .bandwidth(BigDecimal.valueOf(f))
+ .priority(i);
i++;
attrBuilder = attrBuilder.addToUnreservedBandwidth(urBuilder.build());
}
@@ -267,7 +307,7 @@
// attrBuilder = attrBuilder.underlay(builder.build());
ConfigBuilder yangConfigBuilder = DefaultConfig.builder()
- .teLinkAttributes(attrBuilder.build());
+ .teLinkAttributes(attrBuilder.build());
return yangConfigBuilder.build();
}
@@ -279,11 +319,11 @@
*/
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()));
@@ -295,7 +335,7 @@
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
@@ -321,13 +361,13 @@
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());
@@ -338,18 +378,18 @@
for (float f : teLink.availBandwidth()) {
UnreservedBandwidth.UnreservedBandwidthBuilder urBuilder = DefaultUnreservedBandwidth
.builder()
- .bandwidth(BigDecimal.valueOf(f))
- .priority(i);
+ .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) {
@@ -357,8 +397,8 @@
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());
}
@@ -389,43 +429,43 @@
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))
+ .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);
}
@@ -439,12 +479,12 @@
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
@@ -455,8 +495,8 @@
}
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()));
@@ -473,18 +513,18 @@
.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
@@ -530,9 +570,9 @@
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);
@@ -625,8 +665,9 @@
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,
@@ -647,7 +688,7 @@
}
private static TeLinkTpGlobalKey findSupportTeLinkId(Networks yangNetworks,
- Link yangLink) {
+ Link yangLink) {
Network teNetworkFound = null;
LinkId teLinkIdFound = null;
TeLinkTpGlobalKey supportTeLinkId = null;
@@ -700,7 +741,7 @@
supportTeLinkId = new TeLinkTpGlobalKey(teTopologyId.providerId(),
teTopologyId.clientId(),
Long.valueOf(teTopologyId
- .topologyId()),
+ .topologyId()),
tenIdLong, teSupportLinkTpId);
}
@@ -742,7 +783,7 @@
if (yangTpnode.tpId().equals(yangTpId)) {
if (yangTpnode.yangAugmentedInfoMap() != null
&& !yangTpnode.yangAugmentedInfoMap()
- .isEmpty()) {
+ .isEmpty()) {
AugmentedNtTerminationPoint yangTpAugment =
(AugmentedNtTerminationPoint) yangTpnode
.yangAugmentedInfo(AugmentedNtTerminationPoint.class);
@@ -758,17 +799,18 @@
}
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);
@@ -789,17 +831,17 @@
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());
}
@@ -831,8 +873,8 @@
}
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();
@@ -855,11 +897,11 @@
}
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
@@ -874,7 +916,7 @@
PathElement tePathElementBackup = new PathElement(pathElementBackupYang.pathElementId(),
teNodeId,
null, // FIXME: find the proper ElementType
- // from pathElementBackupYang.type()
+ // from pathElementBackupYang.type()
false); // FIXME: find the proper value for loose
backupPathElementList.add(tePathElementBackup);
}
@@ -888,13 +930,13 @@
}
/**
- * 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);
@@ -915,12 +957,12 @@
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;
@@ -962,6 +1004,13 @@
return teLinkEventBuilder.build();
}
+ /**
+ * Retrieves the TE network link key from a given YANG network link
+ * notification event.
+ *
+ * @param yangLinkEvent YANG network link notification
+ * @return TE network link key
+ */
public static NetworkLinkKey yangLinkEvent2NetworkLinkKey(TeLinkEvent yangLinkEvent) {
NetworkId networkRef = NetworkId.fromString(yangLinkEvent.networkRef().toString());
LinkId linkRef = LinkId.fromString(yangLinkEvent.linkRef().toString());
@@ -971,9 +1020,16 @@
NetworkLinkKey networkLinkKey = new NetworkLinkKey(networkId, linkId);
return networkLinkKey;
-
}
+ /**
+ * Converts a YANG network link notification event into a TE network
+ * link.
+ *
+ * @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) {
@@ -1005,19 +1061,23 @@
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();
diff --git a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NodeConverter.java b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NodeConverter.java
index 26255f8..cf8d6c1 100644
--- a/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NodeConverter.java
+++ b/apps/tenbi/utils/src/main/java/org/onosproject/teyang/utils/topology/NodeConverter.java
@@ -15,12 +15,8 @@
*/
package org.onosproject.teyang.utils.topology;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.BitSet;
-import java.util.List;
-import java.util.Map;
-
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import org.apache.commons.collections.MapUtils;
import org.onlab.packet.Ip4Address;
import org.onosproject.tetopology.management.api.EncodingType;
@@ -51,60 +47,92 @@
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 com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
+import java.util.BitSet;
+import java.util.List;
+import java.util.Map;
+
+import static com.google.common.base.Preconditions.checkNotNull;
/**
* Node conversion functions.
@@ -138,7 +166,7 @@
.builder();
teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder
.isAbstract(teSubsystemTeNode.flags()
- .get(TeNode.BIT_ABSTRACT));
+ .get(TeNode.BIT_ABSTRACT));
if (teSubsystemTeNode.adminStatus() != null) {
teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder
@@ -153,7 +181,7 @@
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
@@ -173,26 +201,26 @@
}
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;
}
@@ -202,7 +230,7 @@
UnderlayTopology.UnderlayTopologyBuilder underlayBuilder = DefaultUnderlayTopology
.builder()
.teTopologyIdRef(TeTopologyId
- .fromString(String.valueOf(underlayTopology.topologyId())))
+ .fromString(String.valueOf(underlayTopology.topologyId())))
.clientIdRef(underlayTopology.clientId())
.providerIdRef(underlayTopology.providerId());
@@ -222,10 +250,10 @@
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
@@ -240,12 +268,12 @@
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
@@ -257,7 +285,8 @@
if (teSubsystemTeNode.opStatus() != null) {
yangStateBuilder = yangStateBuilder.operStatus(EnumConverter
- .teSubsystem2YangOperStatus(teSubsystemTeNode.opStatus()));
+ .teSubsystem2YangOperStatus(teSubsystemTeNode
+ .opStatus()));
}
if (teSubsystemTeNode.sourceTeNodeId() != null) {
@@ -266,10 +295,10 @@
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());
}
@@ -303,39 +332,39 @@
/**
* 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 =
+ .ietftetopology.tenodeaugment.te.tunnelterminationpoint.Config.ConfigBuilder ttpConfigBuilder =
+ org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
+ .ietftetopology.tenodeaugment.te.tunnelterminationpoint.DefaultConfig.builder();
org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
- .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();
+ .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()
@@ -348,7 +377,7 @@
.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());
}
@@ -367,13 +396,13 @@
.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();
}
@@ -381,9 +410,9 @@
/**
* 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,
@@ -401,10 +430,10 @@
.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);
}
@@ -417,7 +446,7 @@
for (TerminationPoint teTp : teSubsystemTeTp.values()) {
tpAugmentBuilder.addToTerminationPoint(TerminationPointConverter
- .teSubsystem2YangTerminationPoint(teTp));
+ .teSubsystem2YangTerminationPoint(teTp));
}
builder.addYangAugmentedInfo(tpAugmentBuilder.build(),
AugmentedNdNode.class);
@@ -432,21 +461,24 @@
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())));
}
}
@@ -460,12 +492,12 @@
/**
* 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;
@@ -509,12 +541,12 @@
// 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();
@@ -544,8 +576,8 @@
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,
@@ -570,7 +602,7 @@
// 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) {
@@ -609,7 +641,7 @@
&& !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;
@@ -623,7 +655,7 @@
}
}
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,
@@ -634,15 +666,15 @@
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);
ttpsMap.put(ByteUtils.bytesToLong(ttpYang.tunnelTpId()), ttpTe);
}
@@ -712,22 +744,22 @@
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());
}
}
@@ -769,7 +801,7 @@
* 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,
@@ -788,7 +820,7 @@
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();
@@ -809,31 +841,31 @@
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());
}
}
@@ -844,6 +876,12 @@
return teNodeAttributes;
}
+ /**
+ * 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
+ */
public static NetworkNodeKey yangNodeEvent2NetworkNodeKey(TeNodeEvent yangNodeEvent) {
NetworkId networkRef = NetworkId.fromString(yangNodeEvent.networkRef().toString());
NodeId nodeRef = NodeId.fromString(yangNodeEvent.nodeRef().toString());
@@ -858,7 +896,7 @@
/**
* Converts YangNode event to NetworkNode.
*
- * @param yangNodeEvent yangNodeEvent
+ * @param yangNodeEvent yangNodeEvent
* @param teTopologyService teTopologyService
* @return NetworkNode
*/
@@ -954,12 +992,12 @@
}
private static ConnectivityMatrix yangNodeEvent2TeConnectivityMatrix(org.onosproject.yang.gen.v1.
- urn.ietf.params.xml.ns.yang.
- ietf.te.topology
- .rev20160708.ietftetopology
- .tenodeconnectivitymatrixabs
- .ConnectivityMatrix yangConnMatrix,
- ConnectivityMatrix oldTeConnMatrix) {
+ urn.ietf.params.xml.ns.yang.
+ ietf.te.topology
+ .rev20160708.ietftetopology
+ .tenodeconnectivitymatrixabs
+ .ConnectivityMatrix yangConnMatrix,
+ ConnectivityMatrix oldTeConnMatrix) {
long id = yangConnMatrix.id();
ElementType from = new TeLinkId((long) (yangConnMatrix.from().tpRef()));
diff --git a/protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestConfSBController.java b/protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestConfSBController.java
index 772aaea..bb565f2 100644
--- a/protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestConfSBController.java
+++ b/protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestConfSBController.java
@@ -31,29 +31,41 @@
* callBackListener upon receiving notifications to notify the requester
* about notifications.
*
- *
- * @param device device to make the request to
- * @param request url of the request
- * @param mediaType format to retrieve the content in
+ * @param device device to make the request to
+ * @param request url of the request
+ * @param mediaType format to retrieve the content in
* @param callBackListener method to call when notifications arrives
*/
void enableNotifications(DeviceId device, String request, String mediaType,
- RestConfNotificationEventListener callBackListener);
+ RestconfNotificationEventListener callBackListener);
/**
- * Register a listener for notification events that occur to restconf
+ * Registers a listener for notification events that occur to restconf
* devices.
*
- * @param deviceId the deviceId
+ * @param deviceId identifier of the device to which the listener is attached
* @param listener the listener to notify
*/
void addNotificationListener(DeviceId deviceId,
- RestConfNotificationEventListener listener);
+ RestconfNotificationEventListener listener);
/**
- * Unregister the listener for the device.
+ * Unregisters the listener for the device.
*
- * @param deviceId the deviceId
+ * @param deviceId identifier of the device for which the listener
+ * is to be removed
+ * @param listener listener to be removed
*/
- void removeNotificationListener(DeviceId deviceId);
+ void removeNotificationListener(DeviceId deviceId,
+ RestconfNotificationEventListener listener);
+
+ /**
+ * Returns true if a listener has been installed to listen to RESTCONF
+ * notifications sent from a particular device.
+ *
+ * @param deviceId identifier of the device from which the notifications
+ * are generated
+ * @return true if listener is installed; false otherwise
+ */
+ boolean isNotificationEnabled(DeviceId deviceId);
}
diff --git a/protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestConfNotificationEventListener.java b/protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestconfNotificationEventListener.java
similarity index 76%
rename from protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestConfNotificationEventListener.java
rename to protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestconfNotificationEventListener.java
index 7866587..230724b 100644
--- a/protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestConfNotificationEventListener.java
+++ b/protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestconfNotificationEventListener.java
@@ -20,13 +20,13 @@
/**
* Notifies providers about incoming RESTCONF notification events.
*/
-public interface RestConfNotificationEventListener<T> {
+public interface RestconfNotificationEventListener<T> {
/**
* Handles the notification event.
*
- * @param deviceId restconf device identifier
- * @param eventJsonString the json string representation of the event
+ * @param deviceId restconf device identifier
+ * @param event event payload
*/
- void handleNotificationEvent(DeviceId deviceId, T eventJsonString);
+ void handleNotificationEvent(DeviceId deviceId, T event);
}
diff --git a/protocols/restconf/client/ctl/src/main/java/org/onosproject/protocol/restconf/ctl/RestConfSBControllerImpl.java b/protocols/restconf/client/ctl/src/main/java/org/onosproject/protocol/restconf/ctl/RestConfSBControllerImpl.java
index ce6335b..897f6c7 100644
--- a/protocols/restconf/client/ctl/src/main/java/org/onosproject/protocol/restconf/ctl/RestConfSBControllerImpl.java
+++ b/protocols/restconf/client/ctl/src/main/java/org/onosproject/protocol/restconf/ctl/RestConfSBControllerImpl.java
@@ -15,16 +15,6 @@
*/
package org.onosproject.protocol.restconf.ctl;
-import java.io.InputStream;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.GenericType;
-import javax.ws.rs.core.Response;
-
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -36,13 +26,24 @@
import org.onosproject.net.DeviceId;
import org.onosproject.protocol.http.ctl.HttpSBControllerImpl;
import org.onosproject.protocol.rest.RestSBDevice;
-import org.onosproject.protocol.restconf.RestConfNotificationEventListener;
import org.onosproject.protocol.restconf.RestConfSBController;
+import org.onosproject.protocol.restconf.RestconfNotificationEventListener;
import org.onosproject.yms.ych.YangProtocolEncodingFormat;
import org.onosproject.yms.ymsm.YmsService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.GenericType;
+import javax.ws.rs.core.Response;
+import java.io.InputStream;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
/**
* The implementation of RestConfSBController.
*/
@@ -62,8 +63,8 @@
private static final String RESOURCE_PATH_PREFIX = "/data/";
private static final String NOTIFICATION_PATH_PREFIX = "/streams/";
- private Map<DeviceId, RestConfNotificationEventListener>
- restconfNotificationListenerMap = new ConcurrentHashMap<>();
+ private Map<DeviceId, Set<RestconfNotificationEventListener>>
+ restconfNotificationListenerMap = new ConcurrentHashMap<>();
private Map<DeviceId, GetChunksRunnable> runnableTable = new ConcurrentHashMap<>();
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
@@ -168,8 +169,13 @@
@Override
public void enableNotifications(DeviceId device, String request,
- String mediaType,
- RestConfNotificationEventListener listener) {
+ String mediaType,
+ RestconfNotificationEventListener listener) {
+
+ if (isNotificationEnabled(device)) {
+ log.warn("enableNotifications: already enabled on device: {}", device);
+ return;
+ }
request = discoverRootResource(device) + NOTIFICATION_PATH_PREFIX
+ request;
@@ -183,10 +189,9 @@
}
public void stopNotifications(DeviceId device) {
-
runnableTable.get(device).terminate();
runnableTable.remove(device);
- removeNotificationListener(device);
+ restconfNotificationListenerMap.remove(device);
log.debug("Stop sending notifications for device URI: " + device.uri().toString());
}
@@ -203,9 +208,9 @@
}
/**
- * @param request request
+ * @param request request
* @param mediaType media type
- * @param device device identifier
+ * @param device device identifier
*/
public GetChunksRunnable(String request, String mediaType,
DeviceId device) {
@@ -218,8 +223,8 @@
public void run() {
WebTarget wt = getWebTarget(device, request);
Response clientResp = wt.request(mediaType).get();
- RestConfNotificationEventListener listener = restconfNotificationListenerMap
- .get(device);
+ Set<RestconfNotificationEventListener> listeners =
+ restconfNotificationListenerMap.get(device);
final ChunkedInput<String> chunkedInput = (ChunkedInput<String>) clientResp
.readEntity(new GenericType<ChunkedInput<String>>() {
});
@@ -233,10 +238,12 @@
chunk = chunkedInput.read();
if (chunk != null) {
if (running) {
- listener.handleNotificationEvent(device, chunk);
+ for (RestconfNotificationEventListener listener : listeners) {
+ listener.handleNotificationEvent(device, chunk);
+ }
} else {
log.trace("the requesting client is no more interested "
- + "to receive such notifications.");
+ + "to receive such notifications.");
}
} else {
log.trace("The received notification chunk is null. do not continue any more.");
@@ -256,15 +263,29 @@
@Override
public void addNotificationListener(DeviceId deviceId,
- RestConfNotificationEventListener listener) {
- if (!restconfNotificationListenerMap.containsKey(deviceId)) {
- this.restconfNotificationListenerMap.put(deviceId, listener);
+ RestconfNotificationEventListener listener) {
+ Set<RestconfNotificationEventListener> listeners =
+ restconfNotificationListenerMap.get(deviceId);
+ if (listeners == null) {
+ listeners = new HashSet<>();
}
+
+ listeners.add(listener);
+
+ this.restconfNotificationListenerMap.put(deviceId, listeners);
}
@Override
- public void removeNotificationListener(DeviceId deviceId) {
- this.restconfNotificationListenerMap.remove(deviceId);
+ public void removeNotificationListener(DeviceId deviceId,
+ RestconfNotificationEventListener listener) {
+ Set<RestconfNotificationEventListener> listeners =
+ restconfNotificationListenerMap.get(deviceId);
+ if (listeners != null) {
+ listeners.remove(listener);
+ }
}
+ public boolean isNotificationEnabled(DeviceId deviceId) {
+ return runnableTable.containsKey(deviceId);
+ }
}
diff --git a/providers/ietfte/pom.xml b/providers/ietfte/pom.xml
index 1931d2f..8661bdf 100644
--- a/providers/ietfte/pom.xml
+++ b/providers/ietfte/pom.xml
@@ -28,18 +28,6 @@
<artifactId>onos-ietfte-providers</artifactId>
<packaging>pom</packaging>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.6</source>
- <target>1.6</target>
- </configuration>
- </plugin>
- </plugins>
- </build>
<modules>
<module>topology</module>
<module>tunnel</module>
diff --git a/providers/ietfte/topology/src/main/java/org/onosproject/provider/te/topology/TeTopologyRestconfProvider.java b/providers/ietfte/topology/src/main/java/org/onosproject/provider/te/topology/TeTopologyRestconfProvider.java
index c75f01d..a377e51 100644
--- a/providers/ietfte/topology/src/main/java/org/onosproject/provider/te/topology/TeTopologyRestconfProvider.java
+++ b/providers/ietfte/topology/src/main/java/org/onosproject/provider/te/topology/TeTopologyRestconfProvider.java
@@ -34,9 +34,10 @@
import org.onosproject.net.provider.AbstractProvider;
import org.onosproject.net.provider.ProviderId;
import org.onosproject.protocol.rest.RestSBDevice;
-import org.onosproject.protocol.restconf.RestConfNotificationEventListener;
import org.onosproject.protocol.restconf.RestConfSBController;
import org.onosproject.provider.te.utils.DefaultJsonCodec;
+import org.onosproject.provider.te.utils.RestconfNotificationEventProcessor;
+import org.onosproject.provider.te.utils.TeTopologyRestconfEventListener;
import org.onosproject.provider.te.utils.YangCompositeEncodingImpl;
import org.onosproject.tetopology.management.api.TeTopologyProvider;
import org.onosproject.tetopology.management.api.TeTopologyProviderRegistry;
@@ -78,6 +79,8 @@
import static org.onosproject.net.config.NetworkConfigEvent.Type.CONFIG_ADDED;
import static org.onosproject.net.config.NetworkConfigEvent.Type.CONFIG_UPDATED;
import static org.onosproject.net.config.basics.SubjectFactories.APP_SUBJECT_FACTORY;
+import static org.onosproject.provider.te.utils.TeTopologyRestconfEventType.TE_TOPOLOGY_LINK_NOTIFICATION;
+import static org.onosproject.provider.te.utils.TeTopologyRestconfEventType.TE_TOPOLOGY_NODE_NOTIFICATION;
import static org.slf4j.LoggerFactory.getLogger;
/**
@@ -93,8 +96,6 @@
private static final String IETF_NETWORK_URI = "ietf-network:networks";
private static final String IETF_NETWORKS_PREFIX =
"{\"ietf-network:networks\":";
- private static final String TE_NOTIFICATION_PREFIX =
- "{\"ietf-te-topology:ietf-te-topology\":";
private static final String TE_LINK_EVENT_PREFIX =
"{\"ietf-te-topology:te-link-event\":";
private static final String TE_NODE_EVENT_PREFIX =
@@ -290,11 +291,27 @@
// topologyProviderService.networkUpdated(network);
// }
- RestConfNotificationEventListener<String> callBackListener =
- new InternalRestconfNotificationEventListener();
- restconfClient.enableNotifications(deviceId, IETF_NOTIFICATION_URI,
- "application/json",
- callBackListener);
+ subscribeRestconfNotification(deviceId);
+ }
+
+ private void subscribeRestconfNotification(DeviceId deviceId) {
+
+ TeTopologyRestconfEventListener listener =
+ new TeTopologyRestconfEventListener();
+
+ listener.addCallbackFunction(TE_TOPOLOGY_LINK_NOTIFICATION,
+ new InternalLinkEventProcessor());
+ listener.addCallbackFunction(TE_TOPOLOGY_NODE_NOTIFICATION,
+ new InternalNodeEventProcessor());
+
+ if (!restconfClient.isNotificationEnabled(deviceId)) {
+ restconfClient.enableNotifications(deviceId,
+ IETF_NOTIFICATION_URI,
+ "application/json",
+ listener);
+ } else {
+ restconfClient.addNotificationListener(deviceId, listener);
+ }
}
private String removePrefixTagFromJson(String jsonString, String prefixTag) {
@@ -304,42 +321,15 @@
return jsonString;
}
- private class InternalNetworkConfigListener implements NetworkConfigListener {
+ private class InternalLinkEventProcessor implements
+ RestconfNotificationEventProcessor<String> {
@Override
- public void event(NetworkConfigEvent event) {
- executor.execute(TeTopologyRestconfProvider.this::connectDevices);
- }
-
- @Override
- public boolean isRelevant(NetworkConfigEvent event) {
- return event.configClass().equals(RestconfServerConfig.class) &&
- (event.type() == CONFIG_ADDED ||
- event.type() == CONFIG_UPDATED);
- }
- }
-
- private class InternalRestconfNotificationEventListener implements
- RestConfNotificationEventListener<String> {
- @Override
- public void handleNotificationEvent(DeviceId deviceId,
- String eventJsonString) {
- log.debug("New notification: {} for device: {}",
- eventJsonString, deviceId.toString());
-
- String teEventString = removePrefixTagFromJson(eventJsonString,
- TE_NOTIFICATION_PREFIX);
- if (teEventString.startsWith(TE_LINK_EVENT_PREFIX)) {
- String linkString = removePrefixTagFromJson(teEventString,
- TE_LINK_EVENT_PREFIX);
- log.debug("link event={}", linkString);
- handleRestconfLinkNotification(linkString);
- } else if (teEventString.startsWith(TE_NODE_EVENT_PREFIX)) {
- String nodeString = removePrefixTagFromJson(teEventString,
- TE_NODE_EVENT_PREFIX);
- log.debug("node event={}", nodeString);
- handleRestconfNodeNotification(nodeString);
- }
+ public void processEventPayload(String payload) {
+ String linkString = removePrefixTagFromJson(payload,
+ TE_LINK_EVENT_PREFIX);
+ log.debug("link event={}", linkString);
+ handleRestconfLinkNotification(linkString);
}
private void handleRestconfLinkNotification(String linkString) {
@@ -377,29 +367,16 @@
topologyProviderService.linkUpdated(linkKey, networkLink);
}
+ }
- private IetfTeTopologyEvent convertJson2IetfTeTopologyEvent(String uriString,
- String jsonBody) {
+ private class InternalNodeEventProcessor implements
+ RestconfNotificationEventProcessor<String> {
- YangCompositeEncodingImpl yce =
- new YangCompositeEncodingImpl(YangResourceIdentifierType.URI,
- uriString,
- jsonBody);
- Object yo = codecHandler.decode(yce,
- YangProtocolEncodingFormat.JSON,
- YmsOperationType.NOTIFICATION);
-
- if (yo == null) {
- log.error("YMS decoder error");
- return null;
- }
-
- if (!(yo instanceof IetfTeTopologyEvent)) {
- log.error("ERROR: YO is not IetfTeTopologyEvent");
- return null;
- }
-
- return (IetfTeTopologyEvent) yo;
+ @Override
+ public void processEventPayload(String payload) {
+ String nodeString = removePrefixTagFromJson(payload, TE_NODE_EVENT_PREFIX);
+ log.debug("node event={}", nodeString);
+ handleRestconfNodeNotification(nodeString);
}
private void handleRestconfNodeNotification(String nodeString) {
@@ -437,4 +414,43 @@
topologyProviderService.nodeUpdated(nodeKey, networkNode);
}
}
+
+ private class InternalNetworkConfigListener implements NetworkConfigListener {
+
+ @Override
+ public void event(NetworkConfigEvent event) {
+ executor.execute(TeTopologyRestconfProvider.this::connectDevices);
+ }
+
+ @Override
+ public boolean isRelevant(NetworkConfigEvent event) {
+ return event.configClass().equals(RestconfServerConfig.class) &&
+ (event.type() == CONFIG_ADDED ||
+ event.type() == CONFIG_UPDATED);
+ }
+ }
+
+ private IetfTeTopologyEvent convertJson2IetfTeTopologyEvent(String uriString,
+ String jsonBody) {
+
+ YangCompositeEncodingImpl yce =
+ new YangCompositeEncodingImpl(YangResourceIdentifierType.URI,
+ uriString,
+ jsonBody);
+ Object yo = codecHandler.decode(yce,
+ YangProtocolEncodingFormat.JSON,
+ YmsOperationType.NOTIFICATION);
+
+ if (yo == null) {
+ log.error("YMS decoder error");
+ return null;
+ }
+
+ if (!(yo instanceof IetfTeTopologyEvent)) {
+ log.error("ERROR: YO is not IetfTeTopologyEvent");
+ return null;
+ }
+
+ return (IetfTeTopologyEvent) yo;
+ }
}
diff --git a/providers/ietfte/tunnel/src/main/java/org/onosproject/provider/te/tunnel/TeTunnelRestconfProvider.java b/providers/ietfte/tunnel/src/main/java/org/onosproject/provider/te/tunnel/TeTunnelRestconfProvider.java
index 3a081ce..1d9468d 100644
--- a/providers/ietfte/tunnel/src/main/java/org/onosproject/provider/te/tunnel/TeTunnelRestconfProvider.java
+++ b/providers/ietfte/tunnel/src/main/java/org/onosproject/provider/te/tunnel/TeTunnelRestconfProvider.java
@@ -33,8 +33,8 @@
import org.onosproject.net.Path;
import org.onosproject.net.provider.AbstractProvider;
import org.onosproject.net.provider.ProviderId;
-import org.onosproject.protocol.restconf.RestConfNotificationEventListener;
import org.onosproject.protocol.restconf.RestConfSBController;
+import org.onosproject.protocol.restconf.RestconfNotificationEventListener;
import org.onosproject.provider.te.utils.DefaultJsonCodec;
import org.onosproject.provider.te.utils.YangCompositeEncodingImpl;
import org.onosproject.tetopology.management.api.TeTopology;
@@ -89,6 +89,7 @@
private static final int DEFAULT_INDEX = 1;
private static final String TUNNELS = "tunnels";
private static final String TUNNELS_URL = IETF + ":" + TE + "/" + TUNNELS;
+ private static final String IETF_NOTIFICATION_URI = "netconf";
private static final String MEDIA_TYPE_JSON = "json";
private static final String SHOULD_IN_ONE = "Tunnel should be setup in one topo";
@@ -96,8 +97,8 @@
private static final String RESTCONF_ROOT = "/onos/restconf";
private static final String TE_TUNNEL_KEY = "TeTunnelKey";
- private final RestConfNotificationEventListener listener =
- new InternalTunnelNotificationListener();
+ //private final RestconfNotificationEventListener listener =
+ // new InternalTunnelNotificationListener();
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected RestConfSBController controller;
@@ -165,9 +166,14 @@
private void subscribe() {
for (DeviceId deviceId : controller.getDevices().keySet()) {
try {
- controller.enableNotifications(deviceId, TUNNELS_URL,
- MEDIA_TYPE_JSON,
- listener);
+ if (!controller.isNotificationEnabled(deviceId)) {
+ controller.enableNotifications(deviceId, IETF_NOTIFICATION_URI,
+ "application/json",
+ new InternalTunnelNotificationListener());
+ } else {
+ controller.addNotificationListener(deviceId,
+ new InternalTunnelNotificationListener());
+ }
} catch (Exception e) {
log.error("Failed to subscribe for {} : {}", deviceId,
e.getMessage());
@@ -179,7 +185,8 @@
controller.getDevices()
.keySet()
.forEach(deviceId -> controller
- .removeNotificationListener(deviceId));
+ .removeNotificationListener(deviceId,
+ new InternalTunnelNotificationListener()));
}
@Override
@@ -343,8 +350,9 @@
return deviceId;
}
+
private class InternalTunnelNotificationListener implements
- RestConfNotificationEventListener {
+ RestconfNotificationEventListener {
@Override
public void handleNotificationEvent(DeviceId deviceId, Object eventJsonString) {
diff --git a/providers/ietfte/utils/BUCK b/providers/ietfte/utils/BUCK
index 7817d31..0964039 100644
--- a/providers/ietfte/utils/BUCK
+++ b/providers/ietfte/utils/BUCK
@@ -2,6 +2,7 @@
'//lib:CORE_DEPS',
'//apps/yms/api:onos-apps-yms-api',
'//protocols/restconf/server/utils:onos-protocols-restconf-server-utils',
+ '//protocols/restconf/client/api:onos-protocols-restconf-client-api',
]
TEST_DEPS = [
diff --git a/providers/ietfte/utils/pom.xml b/providers/ietfte/utils/pom.xml
index 35c727e..3174a8b 100644
--- a/providers/ietfte/utils/pom.xml
+++ b/providers/ietfte/utils/pom.xml
@@ -37,10 +37,13 @@
</dependency>
<dependency>
<groupId>org.onosproject</groupId>
+ <artifactId>onos-restconf-client-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
<artifactId>onos-restconf-server-utils</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
-
-
-</project>
\ No newline at end of file
+</project>
diff --git a/providers/ietfte/utils/src/main/java/org/onosproject/provider/te/utils/RestconfNotificationEventProcessor.java b/providers/ietfte/utils/src/main/java/org/onosproject/provider/te/utils/RestconfNotificationEventProcessor.java
new file mode 100644
index 0000000..7f6ea2e
--- /dev/null
+++ b/providers/ietfte/utils/src/main/java/org/onosproject/provider/te/utils/RestconfNotificationEventProcessor.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.provider.te.utils;
+
+/**
+ * Abstraction of the RESTCONF notification callback function. The callback
+ * is invoked by the notification listener when it receives an event.
+ */
+public interface RestconfNotificationEventProcessor<T> {
+ void processEventPayload(T event);
+}
diff --git a/providers/ietfte/utils/src/main/java/org/onosproject/provider/te/utils/TeTopologyRestconfEventListener.java b/providers/ietfte/utils/src/main/java/org/onosproject/provider/te/utils/TeTopologyRestconfEventListener.java
new file mode 100644
index 0000000..668fec6
--- /dev/null
+++ b/providers/ietfte/utils/src/main/java/org/onosproject/provider/te/utils/TeTopologyRestconfEventListener.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.provider.te.utils;
+
+import org.onosproject.net.DeviceId;
+import org.onosproject.protocol.restconf.RestconfNotificationEventListener;
+import org.slf4j.Logger;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Implementation of the RESTCONF notification event
+ * listener for TE Topology.
+ */
+public class TeTopologyRestconfEventListener implements
+ RestconfNotificationEventListener<String> {
+ private static final String TE_TOPOLOGY_NOTIFICATION_PREFIX =
+ "{\"ietf-te-topology:ietf-te-topology\":";
+ private static final String TE_LINK_EVENT_PREFIX =
+ "{\"ietf-te-topology:te-link-event\":";
+ private static final String TE_NODE_EVENT_PREFIX =
+ "{\"ietf-te-topology:te-node-event\":";
+
+ private final Logger log = getLogger(getClass());
+
+ private Map<TeTopologyRestconfEventType, RestconfNotificationEventProcessor>
+ eventCallbackFunctionMap = new ConcurrentHashMap<>();
+
+ @Override
+ public void handleNotificationEvent(DeviceId deviceId,
+ String eventJsonString) {
+ log.debug("New notification: {} for device: {}",
+ eventJsonString, deviceId.toString());
+
+ if (!eventJsonString.startsWith(TE_TOPOLOGY_NOTIFICATION_PREFIX)) {
+ // This is not a TE topology event.
+ return;
+ }
+
+ String teEventString = removePrefixTagFromJson(eventJsonString,
+ TE_TOPOLOGY_NOTIFICATION_PREFIX);
+
+ TeTopologyRestconfEventType eventType = getEventType(teEventString);
+
+ if (eventType == TeTopologyRestconfEventType.TE_UNKNOWN_EVENT) {
+ log.error("handleNotificationEvent: unknown event: {}", eventJsonString);
+ return;
+ }
+
+ RestconfNotificationEventProcessor eventProcessor =
+ eventCallbackFunctionMap.get(eventType);
+
+ if (eventProcessor != null) {
+ eventProcessor.processEventPayload(teEventString);
+ } else {
+ log.info("Event callback not installed for event type: {}", eventType);
+ }
+ }
+
+ /**
+ * Registers an notification event callback function which is called by
+ * the listener when it receives an event.
+ *
+ * @param eventType notification event type corresponding to the
+ * callback function
+ * @param eventProcessor callback function
+ */
+ public void addCallbackFunction(TeTopologyRestconfEventType eventType,
+ RestconfNotificationEventProcessor eventProcessor) {
+ if (eventCallbackFunctionMap.containsKey(eventType)) {
+ removeCallbackFunction(eventType);
+ }
+
+ eventCallbackFunctionMap.put(eventType, eventProcessor);
+ }
+
+ /**
+ * Removes the callback function associated with the given event type.
+ *
+ * @param eventType notification event type
+ */
+ public void removeCallbackFunction(TeTopologyRestconfEventType eventType) {
+ eventCallbackFunctionMap.remove(eventType);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ TeTopologyRestconfEventListener that = (TeTopologyRestconfEventListener) o;
+
+ return eventCallbackFunctionMap != null ?
+ eventCallbackFunctionMap.equals(that.eventCallbackFunctionMap) :
+ that.eventCallbackFunctionMap == null;
+ }
+
+ @Override
+ public int hashCode() {
+ return eventCallbackFunctionMap != null ? eventCallbackFunctionMap.hashCode() : 0;
+ }
+
+ private String removePrefixTagFromJson(String jsonString, String prefixTag) {
+ if (jsonString.startsWith(prefixTag)) {
+ return jsonString.substring(prefixTag.length(), jsonString.length() - 1);
+ }
+ return jsonString;
+ }
+
+ private TeTopologyRestconfEventType getEventType(String teEventString) {
+ if (teEventString.startsWith(TE_LINK_EVENT_PREFIX)) {
+ return TeTopologyRestconfEventType.TE_TOPOLOGY_LINK_NOTIFICATION;
+ }
+
+ if (teEventString.startsWith(TE_NODE_EVENT_PREFIX)) {
+ return TeTopologyRestconfEventType.TE_TOPOLOGY_NODE_NOTIFICATION;
+ }
+
+ return TeTopologyRestconfEventType.TE_UNKNOWN_EVENT;
+ }
+}
+
diff --git a/providers/ietfte/utils/src/main/java/org/onosproject/provider/te/utils/TeTopologyRestconfEventType.java b/providers/ietfte/utils/src/main/java/org/onosproject/provider/te/utils/TeTopologyRestconfEventType.java
new file mode 100644
index 0000000..6806023
--- /dev/null
+++ b/providers/ietfte/utils/src/main/java/org/onosproject/provider/te/utils/TeTopologyRestconfEventType.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.provider.te.utils;
+
+/**
+ * Types of TE Topology RESTCONF notification events.
+ */
+public enum TeTopologyRestconfEventType {
+ /**
+ * TE topology link event type.
+ */
+ TE_TOPOLOGY_LINK_NOTIFICATION,
+
+ /**
+ * TE topology node event type.
+ */
+ TE_TOPOLOGY_NODE_NOTIFICATION,
+
+ /**
+ * Unknown or unsupported event type.
+ */
+ TE_UNKNOWN_EVENT,
+}