From a010a8570de9413aab83a65a204893652e39284b Mon Sep 17 00:00:00 2001 From: "Claudio D. Gasparini" Date: Tue, 19 Apr 2016 18:11:26 +0200 Subject: [PATCH] BUG-5731: Send Error Message if LSP-IDENTIFIERS TLV is missing LSP-IDENTIFIERS TLV is mandatory based on https://tools.ietf.org/html/draft-ietf-pce-stateful-pce-14#section-7.3.1 Send Error Message if missing Change-Id: I4476951de9669efb13c4ed7973182d465aecb47b Signed-off-by: Claudio D. Gasparini --- .../extension/PcRptMessageCodecTest.java | 20 +++- .../Stateful07PCReportMessageParser.java | 21 +++- .../protocol/pcep/ietf/PCEPValidatorTest.java | 103 +++++++++++++----- .../src/test/resources/PCRpt.1.bin | Bin 12 -> 0 bytes .../src/test/resources/PCRpt.2.bin | Bin 40 -> 0 bytes .../spi/AbstractObjectWithTlvsParser.java | 2 - .../protocol/pcep/spi/PSTUtil.java | 29 +++++ .../Stateful07TopologySessionListener.java | 16 +-- 8 files changed, 148 insertions(+), 43 deletions(-) delete mode 100644 pcep/ietf-stateful07/src/test/resources/PCRpt.1.bin delete mode 100644 pcep/ietf-stateful07/src/test/resources/PCRpt.2.bin create mode 100644 pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PSTUtil.java diff --git a/pcep/auto-bandwidth-extension/src/test/java/org/opendaylight/protocol/pcep/auto/bandwidth/extension/PcRptMessageCodecTest.java b/pcep/auto-bandwidth-extension/src/test/java/org/opendaylight/protocol/pcep/auto/bandwidth/extension/PcRptMessageCodecTest.java index 35cd57bc27..e86abe9066 100644 --- a/pcep/auto-bandwidth-extension/src/test/java/org/opendaylight/protocol/pcep/auto/bandwidth/extension/PcRptMessageCodecTest.java +++ b/pcep/auto-bandwidth-extension/src/test/java/org/opendaylight/protocol/pcep/auto/bandwidth/extension/PcRptMessageCodecTest.java @@ -25,20 +25,30 @@ import org.opendaylight.protocol.pcep.ietf.stateful07.StatefulActivator; import org.opendaylight.protocol.pcep.impl.Activator; import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException; import org.opendaylight.protocol.pcep.spi.pojo.SimplePCEPExtensionProviderContext; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.auto.bandwidth.rev160109.Bandwidth1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.auto.bandwidth.rev160109.Bandwidth1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.auto.bandwidth.rev160109.bandwidth.usage.object.BandwidthUsage; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.auto.bandwidth.rev160109.bandwidth.usage.object.BandwidthUsageBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.Bandwidth; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Pcrpt; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.LspIdentifiers; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.LspIdentifiersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.lsp.identifiers.AddressFamily; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv4CaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.lsp.identifiers.address.family.ipv4._case.Ipv4Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.Lsp; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.LspBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.lsp.TlvsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.Reports; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object; 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.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.rsvp.rev150820.Ipv4ExtendedTunnelId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.LspId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.TunnelId; public class PcRptMessageCodecTest { @@ -69,7 +79,15 @@ public class PcRptMessageCodecTest { public void testGetValidReportsPositive() { final PcRptMessageCodec codec = new PcRptMessageCodec(this.ctx.getObjectHandlerRegistry()); final BandwidthUsage bw = new BandwidthUsageBuilder().setBwSample(Lists.newArrayList(new Bandwidth(new byte[] {0, 0, 0, 1}))).build(); - final Lsp lsp = new LspBuilder().build(); + final Ipv4Builder builder = new Ipv4Builder(); + builder.setIpv4TunnelSenderAddress(new Ipv4Address("127.0.1.1")); + builder.setIpv4ExtendedTunnelId(new Ipv4ExtendedTunnelId(new Ipv4Address("127.0.1.2"))); + builder.setIpv4TunnelEndpointAddress(new Ipv4Address("127.0.1.3")); + final AddressFamily afiLsp = new Ipv4CaseBuilder().setIpv4(builder.build()).build(); + final LspId lspId = new LspId(1L); + final TunnelId tunnelId = new TunnelId(1); + final LspIdentifiers identifier = new LspIdentifiersBuilder().setAddressFamily(afiLsp).setLspId(lspId).setTunnelId(tunnelId).build(); + final Lsp lsp = new LspBuilder().setTlvs(new TlvsBuilder().setLspIdentifiers(identifier).build()).build(); final Ero ero = new EroBuilder().build(); final List objects = Lists.newArrayList(lsp, ero, bw); final Reports validReports = codec.getValidReports(objects, Collections.emptyList()); diff --git a/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07PCReportMessageParser.java b/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07PCReportMessageParser.java index ddeb7902de..b87e758b50 100644 --- a/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07PCReportMessageParser.java +++ b/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07PCReportMessageParser.java @@ -18,6 +18,7 @@ import org.opendaylight.protocol.pcep.spi.MessageUtil; import org.opendaylight.protocol.pcep.spi.ObjectRegistry; import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException; import org.opendaylight.protocol.pcep.spi.PCEPErrors; +import org.opendaylight.protocol.pcep.spi.PSTUtil; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Pcrpt; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PcrptBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.Lsp; @@ -27,6 +28,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.iet import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.reports.Path; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.reports.PathBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.Srp; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.srp.Tlvs; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.bandwidth.object.Bandwidth; @@ -103,13 +105,26 @@ public class Stateful07PCReportMessageParser extends AbstractMessageParser { protected Reports getValidReports(final List objects, final List errors) { boolean isValid = true; final ReportsBuilder builder = new ReportsBuilder(); + boolean lspViaSR = false; if (objects.get(0) instanceof Srp) { - builder.setSrp((Srp) objects.get(0)); + final Srp srp = (Srp) objects.get(0); + final Tlvs tlvs = srp.getTlvs(); + if (tlvs != null) { + lspViaSR = PSTUtil.isDefaultPST(tlvs.getPathSetupType()); + } + builder.setSrp(srp); objects.remove(0); } + if (objects.get(0) instanceof Lsp) { - builder.setLsp((Lsp) objects.get(0)); - objects.remove(0); + final Lsp lsp = (Lsp) objects.get(0); + if(!lspViaSR && lsp.getTlvs().getLspIdentifiers() == null && lsp.getPlspId().getValue() != 0) { + errors.add(createErrorMsg(PCEPErrors.LSP_IDENTIFIERS_TLV_MISSING, Optional.absent())); + isValid = false; + } else { + builder.setLsp(lsp); + objects.remove(0); + } } else { errors.add(createErrorMsg(PCEPErrors.LSP_MISSING, Optional.absent())); isValid = false; diff --git a/pcep/ietf-stateful07/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPValidatorTest.java b/pcep/ietf-stateful07/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPValidatorTest.java index abc49d6877..5ccd01acc1 100644 --- a/pcep/ietf-stateful07/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPValidatorTest.java +++ b/pcep/ietf-stateful07/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPValidatorTest.java @@ -10,6 +10,7 @@ package org.opendaylight.protocol.pcep.ietf; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; + import com.google.common.collect.Lists; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -48,6 +49,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.iet import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SrpIdNumber; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.LspIdentifiers; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.LspIdentifiersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.lsp.identifiers.AddressFamily; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv4CaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.Lsp; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.LspBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.lsp.TlvsBuilder; @@ -96,6 +101,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.typ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.RroBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.RpBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.AttributeFilter; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.Ipv4ExtendedTunnelId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.LspId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.TunnelId; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.as.number._case.AsNumberBuilder; @@ -112,6 +120,7 @@ public class PCEPValidatorTest { private Rro rro; private Srp srp; private Lsp lsp; + private Lsp lspSrp; private AsNumberCase eroASSubobject; private UnnumberedCase rroUnnumberedSub; @@ -119,6 +128,38 @@ public class PCEPValidatorTest { private SimplePCEPExtensionProviderContext ctx; private Activator act; + private static final byte[] PCRT1 = { + (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x20, + + (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip + (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length + (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1 + (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id + (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2 + (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3 + }; + + private static final byte[] PCRT2 = { + (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x3C, + + (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C, //(byte) 0x39, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip + (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length + (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1 + (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id + (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2 + (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3 + + (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x08, + (byte) 0x20, (byte) 0x04, (byte) 0xFF, (byte) 0xFF, + (byte) 0x09, (byte) 0x10, (byte) 0x00, (byte) 0x14, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 + }; + @Before public void setUp() throws Exception { this.ctx = new SimplePCEPExtensionProviderContext(); @@ -198,7 +239,17 @@ public class PCEPValidatorTest { lspBuilder.setRemove(false); lspBuilder.setTlvs(new TlvsBuilder().build()); lspBuilder.addAugmentation(Lsp1.class, new Lsp1Builder().setCreate(false).build()); - this.lsp = lspBuilder.build(); + + final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.lsp.identifiers.address.family.ipv4._case.Ipv4Builder builder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.lsp.identifiers.address.family.ipv4._case.Ipv4Builder(); + builder.setIpv4TunnelSenderAddress(new Ipv4Address("127.0.1.1")); + final LspId lspId = new LspId(1L); + final TunnelId tunnelId = new TunnelId(1); + builder.setIpv4ExtendedTunnelId(new Ipv4ExtendedTunnelId(new Ipv4Address("127.0.1.2"))); + builder.setIpv4TunnelEndpointAddress(new Ipv4Address("127.0.1.3")); + final AddressFamily afiLsp = new Ipv4CaseBuilder().setIpv4(builder.build()).build(); + final LspIdentifiers identifier = new LspIdentifiersBuilder().setAddressFamily(afiLsp).setLspId(lspId).setTunnelId(tunnelId).build(); + this.lspSrp = lspBuilder.build(); + this.lsp = lspBuilder.setTlvs(new TlvsBuilder().setLspIdentifiers(identifier).build()).build(); final Ipv4Builder afi = new Ipv4Builder(); afi.setSourceIpv4Address(new Ipv4Address("255.255.255.255")); @@ -226,7 +277,7 @@ public class PCEPValidatorTest { builder.setOpen(b.build()); assertEquals(new OpenBuilder().setOpenMessage(builder.build()).build(), parser.parseMessage(result.slice(4, - result.readableBytes() - 4), Collections. emptyList())); + result.readableBytes() - 4), Collections.emptyList())); final ByteBuf buf = Unpooled.buffer(result.readableBytes()); parser.serializeMessage(new OpenBuilder().setOpenMessage(builder.build()).build(), buf); assertArrayEquals(result.array(), buf.array()); @@ -255,11 +306,11 @@ public class PCEPValidatorTest { final PathBuilder pBuilder = new PathBuilder(); pBuilder.setEro(this.ero); pBuilder.setLspa(this.lspa); - updates.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lsp).setPath(pBuilder.build()).build()); + updates.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build()); builder.setUpdates(updates); assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), parser.parseMessage(result.slice(4, - result.readableBytes() - 4), Collections. emptyList())); + result.readableBytes() - 4), Collections.emptyList())); ByteBuf buf = Unpooled.buffer(result.readableBytes()); parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf); assertArrayEquals(result.array(), buf.array()); @@ -270,12 +321,12 @@ public class PCEPValidatorTest { final PathBuilder pBuilder1 = new PathBuilder(); pBuilder1.setEro(this.ero); pBuilder1.setLspa(this.lspa); - updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lsp).setPath(pBuilder.build()).build()); - updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lsp).setPath(pBuilder1.build()).build()); + updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build()); + updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder1.build()).build()); builder.setUpdates(updates1); assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), parser.parseMessage(result.slice(4, - result.readableBytes() - 4), Collections. emptyList())); + result.readableBytes() - 4), Collections.emptyList())); buf = Unpooled.buffer(result.readableBytes()); parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf); assertArrayEquals(result.array(), buf.array()); @@ -284,9 +335,10 @@ public class PCEPValidatorTest { @Test public void testRptMsg() throws IOException, PCEPDeserializerException { - try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) { + try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator(); StatefulActivator b = new StatefulActivator()) { a.start(this.ctx); - ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.1.bin")); + b.start(this.ctx); + ByteBuf result = Unpooled.wrappedBuffer(PCRT1); final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(this.ctx.getObjectHandlerRegistry()); @@ -295,14 +347,13 @@ public class PCEPValidatorTest { final List reports = Lists.newArrayList(); reports.add(new ReportsBuilder().setLsp(this.lsp).build()); builder.setReports(reports); - - assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result.slice(4, - result.readableBytes() - 4), Collections. emptyList())); + final Message parseResult = parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList()); + assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parseResult); ByteBuf buf = Unpooled.buffer(result.readableBytes()); parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); assertArrayEquals(result.array(), buf.array()); - result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.2.bin")); + result = Unpooled.wrappedBuffer(PCRT2); final List reports1 = Lists.newArrayList(); reports1.add(new ReportsBuilder().setLsp(this.lsp).setPath( @@ -310,8 +361,8 @@ public class PCEPValidatorTest { this.ero).setLspa(this.lspa).build()).build()); builder.setReports(reports1); - assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result.slice(4, - result.readableBytes() - 4), Collections. emptyList())); + final ByteBuf input = result.slice(4, result.readableBytes() - 4); + assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(input, Collections.emptyList())); buf = Unpooled.buffer(result.readableBytes()); parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); assertArrayEquals(result.array(), buf.array()); @@ -324,11 +375,11 @@ public class PCEPValidatorTest { pBuilder.setLspa(this.lspa); pBuilder.setMetrics(Lists.newArrayList(this.metrics, this.metrics)); pBuilder.setRro(this.rro); - reports2.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lsp).setPath(pBuilder.build()).build()); + reports2.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build()); builder.setReports(reports2); assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result.slice(4, - result.readableBytes() - 4), Collections. emptyList())); + result.readableBytes() - 4), Collections.emptyList())); buf = Unpooled.buffer(result.readableBytes()); parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); assertArrayEquals(result.array(), buf.array()); @@ -341,12 +392,12 @@ public class PCEPValidatorTest { pBuilder1.setLspa(this.lspa); pBuilder1.setMetrics(Lists.newArrayList(this.metrics, this.metrics)); pBuilder1.setRro(this.rro); - reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lsp).setPath(pBuilder.build()).build()); - reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lsp).setPath(pBuilder1.build()).build()); + reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build()); + reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder1.build()).build()); builder.setReports(reports3); assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result.slice(4, - result.readableBytes() - 4), Collections. emptyList())); + result.readableBytes() - 4), Collections.emptyList())); buf = Unpooled.buffer(result.readableBytes()); parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); assertArrayEquals(result.array(), buf.array()); @@ -366,7 +417,7 @@ public class PCEPValidatorTest { final List reqs = Lists.newArrayList(); rBuilder.setSrp(this.srp); - rBuilder.setLsp(this.lsp); + rBuilder.setLsp(this.lspSrp); rBuilder.setEro(this.ero); rBuilder.setLspa(this.lspa); rBuilder.setMetrics(Lists.newArrayList(this.metrics)); @@ -375,7 +426,7 @@ public class PCEPValidatorTest { builder.setRequests(reqs); assertEquals(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), parser.parseMessage(result.slice(4, - result.readableBytes() - 4), Collections. emptyList())); + result.readableBytes() - 4), Collections.emptyList())); final ByteBuf buf = Unpooled.buffer(result.readableBytes()); parser.serializeMessage(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), buf); assertArrayEquals(result.array(), buf.array()); @@ -402,7 +453,7 @@ public class PCEPValidatorTest { builder.setErrorType(new StatefulCaseBuilder().setStateful(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcerr.pcerr.message.error.type.stateful._case.StatefulBuilder().setSrps(srps).build()).build()); assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4, - result.readableBytes() - 4), Collections. emptyList())); + result.readableBytes() - 4), Collections.emptyList())); ByteBuf buf = Unpooled.buffer(result.readableBytes()); parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf); assertArrayEquals(result.array(), buf.array()); @@ -440,7 +491,7 @@ public class PCEPValidatorTest { builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build()); assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4, - result.readableBytes() - 4), Collections. emptyList())); + result.readableBytes() - 4), Collections.emptyList())); buf = Unpooled.buffer(result.readableBytes()); parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf); assertArrayEquals(result.array(), buf.array()); @@ -466,7 +517,7 @@ public class PCEPValidatorTest { .build()).build()).build()); assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4, - result.readableBytes() - 4), Collections. emptyList())); + result.readableBytes() - 4), Collections.emptyList())); buf = Unpooled.buffer(result.readableBytes()); parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf); assertArrayEquals(result.array(), buf.array()); @@ -497,7 +548,7 @@ public class PCEPValidatorTest { builder.setPcerrMessage(errMsgBuilder.build()); final ByteBuf buf = Unpooled.wrappedBuffer(statefulMsg); - final List errors = Lists.newArrayList(); + final List errors = Lists.newArrayList(); parser.parseMessage(buf.slice(4, buf.readableBytes() - 4), errors); assertFalse(errors.isEmpty()); assertEquals(builder.build(), errors.get(0)); diff --git a/pcep/ietf-stateful07/src/test/resources/PCRpt.1.bin b/pcep/ietf-stateful07/src/test/resources/PCRpt.1.bin deleted file mode 100644 index b1862e86719440ac140a5c3bcdd6ff7cd3bb3144..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12 RcmY%3V&G8_VBlZ?0ssU40B-;Q diff --git a/pcep/ietf-stateful07/src/test/resources/PCRpt.2.bin b/pcep/ietf-stateful07/src/test/resources/PCRpt.2.bin deleted file mode 100644 index 8fa3461231acd535fe33664dcf87088bff003175..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40 fcmY%3V$e_!VBlZ?0(Ky+!1Dh;rvQTph>r{aNYeuO diff --git a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/AbstractObjectWithTlvsParser.java b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/AbstractObjectWithTlvsParser.java index 816f1d59f2..3b5768716b 100644 --- a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/AbstractObjectWithTlvsParser.java +++ b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/AbstractObjectWithTlvsParser.java @@ -23,8 +23,6 @@ public abstract class AbstractObjectWithTlvsParser implements ObjectParser, O private static final Logger LOG = LoggerFactory.getLogger(AbstractObjectWithTlvsParser.class); - public static final int PADDED_TO = 4; - private final TlvRegistry tlvReg; private final VendorInformationTlvRegistry viTlvReg; diff --git a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PSTUtil.java b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PSTUtil.java new file mode 100644 index 0000000000..d5ffe2ed3d --- /dev/null +++ b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PSTUtil.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.protocol.pcep.spi; + +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.path.setup.type.tlv.PathSetupType; + +public final class PSTUtil { + private PSTUtil() { + throw new UnsupportedOperationException(); + } + + /** + * Check whether Path is setup via RSVP-TE signaling protocol + * @param pst + * @return true if setup is via RSVP-TE signaling protocol + */ + public static boolean isDefaultPST(final PathSetupType pst) { + if (pst != null && pst.getPst() != null && pst.getPst().shortValue() != 0) { + return false; + } + return true; + } +} diff --git a/pcep/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/Stateful07TopologySessionListener.java b/pcep/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/Stateful07TopologySessionListener.java index bd0ef78a5f..bf9a3a000e 100644 --- a/pcep/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/Stateful07TopologySessionListener.java +++ b/pcep/topology-provider/src/main/java/org/opendaylight/bgpcep/pcep/topology/provider/Stateful07TopologySessionListener.java @@ -25,6 +25,7 @@ import javax.annotation.concurrent.GuardedBy; import org.opendaylight.controller.config.yang.pcep.topology.provider.PeerCapabilities; import org.opendaylight.protocol.pcep.PCEPSession; import org.opendaylight.protocol.pcep.spi.PCEPErrors; +import org.opendaylight.protocol.pcep.spi.PSTUtil; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.PathComputationClient1; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.PathComputationClient1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.lsp.db.version.tlv.LspDbVersion; @@ -399,7 +400,7 @@ class Stateful07TopologySessionListener extends AbstractTopologySessionListener< if (tlvs != null) { if (tlvs.getLspIdentifiers() != null) { pb.setLspId(tlvs.getLspIdentifiers().getLspId()); - } else if (!isDefaultPST(pst)) { + } else if (!PSTUtil.isDefaultPST(pst)) { pb.setLspId(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.LspId(lsp.getPlspId().getValue())); } } @@ -470,7 +471,7 @@ class Stateful07TopologySessionListener extends AbstractTopologySessionListener< final SrpBuilder srpBuilder = new SrpBuilder(); srpBuilder.setOperationId(nextRequest()); srpBuilder.setProcessingRule(Boolean.TRUE); - if (!isDefaultPST(args.getPathSetupType())) { + if (!PSTUtil.isDefaultPST(args.getPathSetupType())) { srpBuilder.setTlvs( new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.srp.TlvsBuilder() .setPathSetupType(args.getPathSetupType()).build()); @@ -562,7 +563,7 @@ class Stateful07TopologySessionListener extends AbstractTopologySessionListener< srpBuilder.setOperationId(nextRequest()); srpBuilder.setProcessingRule(Boolean.TRUE); if (args != null && args.getPathSetupType() != null) { - if (!isDefaultPST(args.getPathSetupType())) { + if (!PSTUtil.isDefaultPST(args.getPathSetupType())) { srpBuilder.setTlvs( new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.srp.TlvsBuilder() .setPathSetupType(args.getPathSetupType()).build()); @@ -688,7 +689,7 @@ class Stateful07TopologySessionListener extends AbstractTopologySessionListener< final Path1 path1 = rep.get().getPath().get(0).getAugmentation(Path1.class); if (path1 != null) { final PathSetupType pst = path1.getPathSetupType(); - if (!isDefaultPST(pst)) { + if (!PSTUtil.isDefaultPST(pst)) { return Optional.of(pst); } } @@ -696,13 +697,6 @@ class Stateful07TopologySessionListener extends AbstractTopologySessionListener< return Optional.absent(); } - private static boolean isDefaultPST(final PathSetupType pst) { - if (pst != null && pst.getPst() != null && pst.getPst().shortValue() != 0) { - return false; - } - return true; - } - private static PeerCapabilities getCapabilities(final Stateful stateful) { final PeerCapabilities capa = new PeerCapabilities(); capa.setStateful(true); -- 2.36.6