X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=pcep%2Fietf-stateful07%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fpcep%2Fietf%2Fstateful07%2FStateful07PCReportMessageParser.java;fp=pcep%2Fietf-stateful07%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fpcep%2Fietf%2Fstateful07%2FStateful07PCReportMessageParser.java;h=0000000000000000000000000000000000000000;hb=32840354f4bf96a8bb7e214a32d46e5f62445717;hp=8efd94053252736eca8665ba1e938d4b42188efc;hpb=6facb3a1bfd5b6f7455795e2af8432ccf84c54c2;p=bgpcep.git 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 deleted file mode 100644 index 8efd940532..0000000000 --- a/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07PCReportMessageParser.java +++ /dev/null @@ -1,240 +0,0 @@ -/* - * Copyright (c) 2013 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.ietf.stateful07; - -import static com.google.common.base.Preconditions.checkArgument; - -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import org.opendaylight.protocol.pcep.spi.AbstractMessageParser; -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.rev181109.Pcrpt; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.PcrptBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.object.Lsp; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.PcrptMessageBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.pcrpt.message.Reports; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.pcrpt.message.ReportsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.pcrpt.message.reports.Path; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.pcrpt.message.reports.PathBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.srp.object.Srp; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.srp.object.srp.Tlvs; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.Message; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.Object; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.bandwidth.object.Bandwidth; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit.route.object.Ero; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.include.route.object.Iro; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lsp.attributes.Metrics; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lsp.attributes.MetricsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lspa.object.Lspa; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.metric.object.Metric; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.reported.route.object.Rro; - -/** - * Parser for {@link Pcrpt}. - */ -public class Stateful07PCReportMessageParser extends AbstractMessageParser { - - public static final int TYPE = 10; - - public Stateful07PCReportMessageParser(final ObjectRegistry registry) { - super(registry); - } - - @Override - public void serializeMessage(final Message message, final ByteBuf out) { - checkArgument(message instanceof Pcrpt, "Wrong instance of Message. Passed instance of %s. Need Pcrpt.", - message.getClass()); - final Pcrpt msg = (Pcrpt) message; - final List reports = msg.getPcrptMessage().getReports(); - final ByteBuf buffer = Unpooled.buffer(); - for (final Reports report : reports) { - serializeReport(report, buffer); - } - MessageUtil.formatMessage(TYPE, buffer, out); - } - - private void serializeReport(final Reports report, final ByteBuf buffer) { - if (report.getSrp() != null) { - serializeObject(report.getSrp(), buffer); - } - serializeObject(report.getLsp(), buffer); - final Path p = report.getPath(); - if (p != null) { - serializeObject(p.getEro(), buffer); - serializeObject(p.getLspa(), buffer); - serializeObject(p.getBandwidth(), buffer); - serializeObject(p.getReoptimizationBandwidth(), buffer); - if (p.getMetrics() != null) { - for (final Metrics m : p.getMetrics()) { - serializeObject(m.getMetric(), buffer); - } - } - serializeObject(p.getIro(), buffer); - serializeObject(p.getRro(), buffer); - } - } - - @Override - public Message validate(final List objects, final List errors) throws PCEPDeserializerException { - checkArgument(objects != null, "Passed list can't be null."); - if (objects.isEmpty()) { - throw new PCEPDeserializerException("Pcrpt message cannot be empty."); - } - - final List reports = new ArrayList<>(); - - while (!objects.isEmpty()) { - final Reports report = getValidReports(objects, errors); - if (report != null) { - reports.add(report); - } - } - return new PcrptBuilder().setPcrptMessage(new PcrptMessageBuilder().setReports(reports).build()).build(); - } - - protected Reports getValidReports(final List objects, final List errors) { - final ReportsBuilder builder = new ReportsBuilder(); - - boolean lspViaSR = false; - Object object = objects.remove(0); - if (object instanceof Srp) { - final Srp srp = (Srp) object; - final Tlvs tlvs = srp.getTlvs(); - if (tlvs != null) { - lspViaSR = PSTUtil.isDefaultPST(tlvs.getPathSetupType()); - } - builder.setSrp(srp); - if (objects.isEmpty()) { - object = null; - } else { - object = objects.remove(0); - } - } - - if (validateLsp(object, lspViaSR, errors, builder)) { - if (!objects.isEmpty()) { - if (!validatePath(objects, errors, builder)) { - return null; - } - } - - return builder.build(); - } - return null; - } - - private static boolean validateLsp(final Object object, final boolean lspViaSR, final List errors, - final ReportsBuilder builder) { - if (object instanceof Lsp) { - final Lsp lsp = (Lsp) object; - final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp - .object.lsp.Tlvs tlvs = lsp.getTlvs(); - if (!lspViaSR && lsp.getPlspId().getValue().toJava() != 0 - && (tlvs == null || tlvs.getLspIdentifiers() == null)) { - final Message errorMsg = createErrorMsg(PCEPErrors.LSP_IDENTIFIERS_TLV_MISSING, Optional.empty()); - errors.add(errorMsg); - return false; - } - - builder.setLsp(lsp); - return true; - } - - errors.add(createErrorMsg(PCEPErrors.LSP_MISSING, Optional.empty())); - return false; - } - - private static boolean validatePath(final List objects, final List errors, - final ReportsBuilder builder) { - final PathBuilder pBuilder = new PathBuilder(); - Object object = objects.remove(0); - if (object instanceof Ero) { - pBuilder.setEro((Ero) object); - } else { - errors.add(createErrorMsg(PCEPErrors.ERO_MISSING, Optional.empty())); - return false; - } - parsePath(objects, pBuilder); - builder.setPath(pBuilder.build()); - return true; - } - - private static void parsePath(final List objects, final PathBuilder builder) { - final List pathMetrics = new ArrayList<>(); - Object obj; - State state = State.INIT; - while (!objects.isEmpty() && !state.equals(State.END)) { - obj = objects.get(0); - state = insertObject(state, obj, builder, pathMetrics); - if (!state.equals(State.END)) { - objects.remove(0); - } - } - if (!pathMetrics.isEmpty()) { - builder.setMetrics(pathMetrics); - } - } - - private static State insertObject(final State state, final Object obj, final PathBuilder builder, - final List pathMetrics) { - switch (state) { - case INIT: - if (obj instanceof Lspa) { - builder.setLspa((Lspa) obj); - return State.LSPA_IN; - } - // fall through - case LSPA_IN: - if (obj instanceof Bandwidth) { - builder.setBandwidth((Bandwidth) obj); - return State.LSPA_IN; - } - if (obj instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109 - .reoptimization.bandwidth.object.ReoptimizationBandwidth) { - builder.setReoptimizationBandwidth((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang - .pcep.types.rev181109.reoptimization.bandwidth.object.ReoptimizationBandwidth) obj); - return State.LSPA_IN; - } - // fall through - case BANDWIDTH_IN: - if (obj instanceof Metric) { - pathMetrics.add(new MetricsBuilder().setMetric((Metric) obj).build()); - return State.BANDWIDTH_IN; - } - // fall through - case METRIC_IN: - if (obj instanceof Iro) { - builder.setIro((Iro) obj); - return State.IRO_IN; - } - // fall through - case IRO_IN: - if (obj instanceof Rro) { - builder.setRro((Rro) obj); - return State.RRO_IN; - } - // fall through - case RRO_IN: - case END: - return State.END; - default: - return state; - } - } - - private enum State { - INIT, LSPA_IN, BANDWIDTH_IN, METRIC_IN, IRO_IN, RRO_IN, END - } -}