X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=pcep%2Ftunnel-provider%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fbgpcep%2Fpcep%2Ftunnel%2Fprovider%2FTunnelProgramming.java;h=195f6876f1800fa2453194bab6c16394b483fb62;hb=7916d241b3ba1e58495cb63f860a85819e821360;hp=37e5fb332c5789e90b62dce4404f5cab8bb77273;hpb=0e9b41fe0e74eabfbcea798930a832ef1dd840ab;p=bgpcep.git diff --git a/pcep/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunnelProgramming.java b/pcep/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunnelProgramming.java index 37e5fb332c..195f6876f1 100644 --- a/pcep/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunnelProgramming.java +++ b/pcep/tunnel-provider/src/main/java/org/opendaylight/bgpcep/pcep/tunnel/provider/TunnelProgramming.java @@ -14,22 +14,26 @@ import org.opendaylight.bgpcep.pcep.topology.spi.AbstractTopologyProgrammingExec import org.opendaylight.bgpcep.programming.spi.InstructionExecutor; import org.opendaylight.bgpcep.programming.spi.InstructionScheduler; import org.opendaylight.bgpcep.programming.spi.SuccessfulRpcResult; +import org.opendaylight.bgpcep.programming.topology.TopologyProgrammingUtil; +import org.opendaylight.bgpcep.programming.tunnel.TunnelProgrammingUtil; import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction; import org.opendaylight.controller.sal.binding.api.data.DataProviderService; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.bandwidth.object.BandwidthBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.classtype.object.ClassTypeBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.AddressFamily; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.Ipv4Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.Ipv6Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.Ipv4CaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.Ipv6CaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.ipv4._case.Ipv4Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.ipv6._case.Ipv6Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.object.EndpointsObjBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.Ero; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.EroBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.Subobjects; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.SubobjectsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.LspaBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev130930.submit.instruction.output.result.FailureBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev130930.submit.instruction.output.result.failure.Failure; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev130930.submit.instruction.output.result.FailureCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.programming.rev130930.submit.instruction.output.result.failure._case.Failure; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.AddLspInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.AddLspOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.NetworkTopologyPcepService; @@ -39,7 +43,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.UpdateLspInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.UpdateLspOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.add.lsp.args.ArgumentsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.programming.rev131102.TopologyInstructionInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.p2p.rev130819.tunnel.p2p.path.cfg.attributes.ExplicitHops; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.programming.rev131030.PcepCreateP2pTunnelInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.programming.rev131030.PcepCreateP2pTunnelOutput; @@ -55,14 +58,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev130820.ExplicitHops1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev130820.Link1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.pcep.rev130820.SupportingNode1; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.programming.rev130930.BaseTunnelInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.tunnel.programming.rev130930.TpReference; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Link; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.LinkKey; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint; @@ -102,16 +101,16 @@ public final class TunnelProgramming implements TopologyTunnelPcepProgrammingSer TpReader(final DataModificationTransaction t, final InstanceIdentifier topo, final TpReference ref) { this.t = Preconditions.checkNotNull(t); - nii = InstanceIdentifier.builder(topo).node(Node.class, new NodeKey(ref.getNode())).toInstance(); - tii = InstanceIdentifier.builder(nii).node(TerminationPoint.class, new TerminationPointKey(ref.getTp())).toInstance(); + this.nii = InstanceIdentifier.builder(topo).child(Node.class, new NodeKey(ref.getNode())).toInstance(); + this.tii = InstanceIdentifier.builder(this.nii).child(TerminationPoint.class, new TerminationPointKey(ref.getTp())).toInstance(); } private Node getNode() { - return (Node) t.readOperationalData(nii); + return (Node) this.t.readOperationalData(this.nii); } private TerminationPoint getTp() { - return (TerminationPoint) t.readOperationalData(tii); + return (TerminationPoint) this.t.readOperationalData(this.tii); } } @@ -152,9 +151,8 @@ public final class TunnelProgramming implements TopologyTunnelPcepProgrammingSer if (sc.getIpv4Address() != null) { for (final IpAddress dc : dsts) { if (dc.getIpv4Address() != null) { - return new Ipv4Builder(). - setSourceIpv4Address(sc.getIpv4Address()). - setDestinationIpv4Address(dc.getIpv4Address()).build(); + return new Ipv4CaseBuilder().setIpv4( + new Ipv4Builder().setSourceIpv4Address(sc.getIpv4Address()).setDestinationIpv4Address(dc.getIpv4Address()).build()).build(); } } } @@ -168,9 +166,8 @@ public final class TunnelProgramming implements TopologyTunnelPcepProgrammingSer if (sc.getIpv6Address() != null) { for (final IpAddress dc : dsts) { if (dc.getIpv6Address() != null) { - return new Ipv6Builder(). - setSourceIpv6Address(sc.getIpv6Address()). - setDestinationIpv6Address(dc.getIpv6Address()).build(); + return new Ipv6CaseBuilder().setIpv6( + new Ipv6Builder().setSourceIpv6Address(sc.getIpv6Address()).setDestinationIpv6Address(dc.getIpv6Address()).build()).build(); } } } @@ -179,8 +176,8 @@ public final class TunnelProgramming implements TopologyTunnelPcepProgrammingSer return null; } - private NodeId supportingNode(final DataModificationTransaction t, final Node node) { - for (SupportingNode n : node.getSupportingNode()) { + private NodeId supportingNode(final Node node) { + for (final SupportingNode n : node.getSupportingNode()) { final SupportingNode1 n1 = n.getAugmentation(SupportingNode1.class); if (n1 != null && n1.getPathComputationClient().isControlling()) { return n.getKey().getNodeRef(); @@ -195,7 +192,7 @@ public final class TunnelProgramming implements TopologyTunnelPcepProgrammingSer if (!explicitHops.isEmpty()) { final List subobjs = new ArrayList<>(explicitHops.size()); - for (ExplicitHops h : explicitHops) { + for (final ExplicitHops h : explicitHops) { final ExplicitHops1 h1 = h.getAugmentation(ExplicitHops1.class); if (h1 != null) { @@ -217,10 +214,9 @@ public final class TunnelProgramming implements TopologyTunnelPcepProgrammingSer final InstructionExecutor e = new AbstractTopologyProgrammingExecutor() { @Override protected ListenableFuture executeImpl() { - final InstanceIdentifier tii = topologyIdentifier(input); - - final DataModificationTransaction t = dataProvider.beginTransaction(); + final InstanceIdentifier tii = TopologyProgrammingUtil.topologyForInput(input); + final DataModificationTransaction t = TunnelProgramming.this.dataProvider.beginTransaction(); final TpReader dr = new TpReader(t, tii, input.getDestination()); final TpReader sr = new TpReader(t, tii, input.getSource()); @@ -230,7 +226,7 @@ public final class TunnelProgramming implements TopologyTunnelPcepProgrammingSer final TerminationPoint dp = Preconditions.checkNotNull(dr.getTp()); final AddLspInputBuilder ab = new AddLspInputBuilder(); - ab.setNode(Preconditions.checkNotNull(supportingNode(t, sn))); + ab.setNode(Preconditions.checkNotNull(supportingNode(sn))); ab.setName(Preconditions.checkNotNull(input.getSymbolicPathName())); // The link has to be non-existent @@ -248,7 +244,7 @@ public final class TunnelProgramming implements TopologyTunnelPcepProgrammingSer ab.setArguments(args.build()); return Futures.transform( - (ListenableFuture>) topologyService.addLsp(ab.build()), + (ListenableFuture>) TunnelProgramming.this.topologyService.addLsp(ab.build()), new Function, OperationResult>() { @Override public OperationResult apply(final RpcResult input) { @@ -261,28 +257,16 @@ public final class TunnelProgramming implements TopologyTunnelPcepProgrammingSer final Failure f = this.scheduler.submitInstruction(input, e); final PcepCreateP2pTunnelOutputBuilder b = new PcepCreateP2pTunnelOutputBuilder(); if (f != null) { - b.setResult(new FailureBuilder().setFailure(f).build()); + b.setResult(new FailureCaseBuilder().setFailure(f).build()); } final RpcResult res = SuccessfulRpcResult.create(b.build()); return Futures.immediateFuture(res); } - // FIXME: topology programming utility class - private InstanceIdentifier topologyIdentifier(final TopologyInstructionInput input) { - return InstanceIdentifier.builder(). - node(NetworkTopology.class).child(Topology.class, new TopologyKey(input.getTopologyId())).toInstance(); - } - - // FIXME: tunnel programming utility class - private InstanceIdentifier linkIdentifier(final InstanceIdentifier topology, final BaseTunnelInput input) { - return InstanceIdentifier.builder(topology). - child(Link.class, new LinkKey(Preconditions.checkNotNull(input.getLinkId()))).toInstance(); - } - private Node sourceNode(final DataModificationTransaction t, final InstanceIdentifier topology, final Link link) { - final InstanceIdentifier nii = InstanceIdentifier.builder(topology). - child(Node.class, new NodeKey(link.getSource().getSourceNode())).toInstance(); + final InstanceIdentifier nii = InstanceIdentifier.builder(topology).child(Node.class, + new NodeKey(link.getSource().getSourceNode())).toInstance(); return (Node) t.readOperationalData(nii); } @@ -291,10 +275,10 @@ public final class TunnelProgramming implements TopologyTunnelPcepProgrammingSer final InstructionExecutor e = new AbstractTopologyProgrammingExecutor() { @Override protected ListenableFuture executeImpl() { - final InstanceIdentifier tii = topologyIdentifier(input); - final InstanceIdentifier lii = linkIdentifier(tii, input); + final InstanceIdentifier tii = TopologyProgrammingUtil.topologyForInput(input); + final InstanceIdentifier lii = TunnelProgrammingUtil.linkIdentifier(tii, input); - final DataModificationTransaction t = dataProvider.beginTransaction(); + final DataModificationTransaction t = TunnelProgramming.this.dataProvider.beginTransaction(); // The link has to exist final Link link = (Link) t.readOperationalData(lii); @@ -309,7 +293,7 @@ public final class TunnelProgramming implements TopologyTunnelPcepProgrammingSer ab.setNode(node.getSupportingNode().get(0).getKey().getNodeRef()); return Futures.transform( - (ListenableFuture>) topologyService.removeLsp(ab.build()), + (ListenableFuture>) TunnelProgramming.this.topologyService.removeLsp(ab.build()), new Function, OperationResult>() { @Override public OperationResult apply(final RpcResult input) { @@ -322,7 +306,7 @@ public final class TunnelProgramming implements TopologyTunnelPcepProgrammingSer final Failure f = this.scheduler.submitInstruction(input, e); final PcepDestroyTunnelOutputBuilder b = new PcepDestroyTunnelOutputBuilder(); if (f != null) { - b.setResult(new FailureBuilder().setFailure(f).build()); + b.setResult(new FailureCaseBuilder().setFailure(f).build()); } final RpcResult res = SuccessfulRpcResult.create(b.build()); @@ -334,10 +318,10 @@ public final class TunnelProgramming implements TopologyTunnelPcepProgrammingSer final InstructionExecutor e = new AbstractTopologyProgrammingExecutor() { @Override protected ListenableFuture executeImpl() { - final InstanceIdentifier tii = topologyIdentifier(input); - final InstanceIdentifier lii = linkIdentifier(tii, input); + final InstanceIdentifier tii = TopologyProgrammingUtil.topologyForInput(input); + final InstanceIdentifier lii = TunnelProgrammingUtil.linkIdentifier(tii, input); - final DataModificationTransaction t = dataProvider.beginTransaction(); + final DataModificationTransaction t = TunnelProgramming.this.dataProvider.beginTransaction(); // The link has to exist final Link link = (Link) t.readOperationalData(lii); @@ -349,10 +333,9 @@ public final class TunnelProgramming implements TopologyTunnelPcepProgrammingSer final UpdateLspInputBuilder ab = new UpdateLspInputBuilder(); ab.setName(link.getAugmentation(Link1.class).getSymbolicPathName()); - ab.setNode(Preconditions.checkNotNull(supportingNode(t, node))); + ab.setNode(Preconditions.checkNotNull(supportingNode(node))); - final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.update.lsp.args.ArgumentsBuilder args = - new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.update.lsp.args.ArgumentsBuilder(); + final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.update.lsp.args.ArgumentsBuilder args = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev131024.update.lsp.args.ArgumentsBuilder(); args.setAdministrative(input.getAdministrativeStatus() == AdministrativeStatus.Active); args.setBandwidth(new BandwidthBuilder().setBandwidth(input.getBandwidth()).build()); @@ -363,7 +346,7 @@ public final class TunnelProgramming implements TopologyTunnelPcepProgrammingSer ab.setArguments(args.build()); return Futures.transform( - (ListenableFuture>) topologyService.updateLsp(ab.build()), + (ListenableFuture>) TunnelProgramming.this.topologyService.updateLsp(ab.build()), new Function, OperationResult>() { @Override public OperationResult apply(final RpcResult input) { @@ -376,7 +359,7 @@ public final class TunnelProgramming implements TopologyTunnelPcepProgrammingSer final Failure f = this.scheduler.submitInstruction(input, e); final PcepUpdateTunnelOutputBuilder b = new PcepUpdateTunnelOutputBuilder(); if (f != null) { - b.setResult(new FailureBuilder().setFailure(f).build()); + b.setResult(new FailureCaseBuilder().setFailure(f).build()); } final RpcResult res = SuccessfulRpcResult.create(b.build()); @@ -385,6 +368,6 @@ public final class TunnelProgramming implements TopologyTunnelPcepProgrammingSer @Override public void close() { - // FIXME: remove all scheduled instructions, etc. + // FIXME: BUG-186: remove all scheduled instructions, etc. } }