X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=pcep%2Fimpl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fpcep%2Fimpl%2Ftlv%2FNoPathVectorTlvParser.java;h=c4cc3b7526a405a22c7afa12b877a56107f54024;hb=a397aa4828919cc643647c96f5c916ee211f597f;hp=1f651defc9f4fca9da7f4450eb4e716ddcb9dfba;hpb=e47c73b73d01011798a032632f22006119d5847e;p=bgpcep.git diff --git a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/tlv/NoPathVectorTlvParser.java b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/tlv/NoPathVectorTlvParser.java index 1f651defc9..c4cc3b7526 100644 --- a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/tlv/NoPathVectorTlvParser.java +++ b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/tlv/NoPathVectorTlvParser.java @@ -7,62 +7,67 @@ */ package org.opendaylight.protocol.pcep.impl.tlv; +import io.netty.buffer.ByteBuf; + import java.util.BitSet; -import org.opendaylight.protocol.pcep.PCEPDeserializerException; -import org.opendaylight.protocol.pcep.tlv.NoPathVectorTlv; +import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException; +import org.opendaylight.protocol.pcep.spi.TlvParser; +import org.opendaylight.protocol.pcep.spi.TlvSerializer; import org.opendaylight.protocol.util.ByteArray; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.NoPathVectorTlv.Flags; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure._case.no.path.tlvs.NoPathVector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure._case.no.path.tlvs.NoPathVectorBuilder; /** - * Parser for {@link org.opendaylight.protocol.pcep.tlv.NoPathVectorTlv NoPathVectorTlv} + * Parser for {@link NoPathVector} */ -public class NoPathVectorTlvParser { - - public static final int FLAGS_F_LENGTH = 4; - - /* - * flags offsets inside flags field in bits - */ - public static final int PCE_UNAVAILABLE = 31; - public static final int UNKNOWN_DEST = 30; - public static final int UNKNOWN_SRC = 29; - - /* - * flags offsets of flags added by GCO extension - */ - public static final int NO_GCO_SOLUTION = 25; - public static final int NO_GCO_MIGRATION_PATH = 26; - - /* - * flags offsets of flags added by RFC 6006 - */ - public static final int REACHABLITY_PROBLEM = 24; - - public static NoPathVectorTlv parse(byte[] valueBytes) throws PCEPDeserializerException { - if (valueBytes == null || valueBytes.length == 0) - throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty."); +public class NoPathVectorTlvParser implements TlvParser, TlvSerializer { - if (valueBytes.length != FLAGS_F_LENGTH) - throw new PCEPDeserializerException("Wrong length of array of bytes. Passed: " + valueBytes.length + "; Expected: >=" + FLAGS_F_LENGTH + "."); + public static final int TYPE = 1; - final BitSet flags = ByteArray.bytesToBitSet(valueBytes); - return new NoPathVectorTlv(flags.get(PCE_UNAVAILABLE), flags.get(UNKNOWN_DEST), flags.get(UNKNOWN_SRC), flags.get(NO_GCO_SOLUTION), - flags.get(NO_GCO_MIGRATION_PATH), flags.get(REACHABLITY_PROBLEM)); - } + private static final int FLAGS_F_LENGTH = 4; - public static byte[] put(NoPathVectorTlv obj) { - if (obj == null) - throw new IllegalArgumentException("NoPathVectorTlv is mandatory."); + private static final int REACHABLITY_PROBLEM = 24; + private static final int NO_GCO_SOLUTION = 25; + private static final int NO_GCO_MIGRATION_PATH = 26; + private static final int PATH_KEY = 27; + private static final int CHAIN_UNAVAILABLE = 28; + private static final int UNKNOWN_SRC = 29; + private static final int UNKNOWN_DEST = 30; + private static final int PCE_UNAVAILABLE = 31; - final BitSet flags = new BitSet(FLAGS_F_LENGTH * Byte.SIZE); + @Override + public NoPathVector parseTlv(final ByteBuf buffer) throws PCEPDeserializerException { + if (buffer == null) { + return null; + } + if (buffer.readableBytes() != FLAGS_F_LENGTH) { + throw new PCEPDeserializerException("Wrong length of array of bytes. Passed: " + buffer.readableBytes() + "; Expected: >=" + + FLAGS_F_LENGTH + "."); + } + final BitSet flags = ByteArray.bytesToBitSet(ByteArray.readAllBytes(buffer)); + return new NoPathVectorBuilder().setFlags( + new Flags(flags.get(CHAIN_UNAVAILABLE), flags.get(NO_GCO_MIGRATION_PATH), flags.get(NO_GCO_SOLUTION), flags.get(REACHABLITY_PROBLEM), flags.get(PATH_KEY), flags.get(PCE_UNAVAILABLE), flags.get(UNKNOWN_DEST), flags.get(UNKNOWN_SRC))).build(); + } - flags.set(PCE_UNAVAILABLE, obj.isPceUnavailable()); - flags.set(UNKNOWN_DEST, obj.isUnknownDest()); - flags.set(UNKNOWN_SRC, obj.isUnknownSrc()); - flags.set(NO_GCO_SOLUTION, obj.isNoGCOSolution()); - flags.set(NO_GCO_MIGRATION_PATH, obj.isNoGCOMigrationPath()); - flags.set(REACHABLITY_PROBLEM, obj.isReachablityProblem()); + @Override + public byte[] serializeTlv(final Tlv tlvs) { + if (tlvs == null) { + throw new IllegalArgumentException("NoPathVectorTlv is mandatory."); + } + final NoPathVector tlv = (NoPathVector) tlvs; - return ByteArray.bitSetToBytes(flags, FLAGS_F_LENGTH); - } + final BitSet flags = new BitSet(FLAGS_F_LENGTH * Byte.SIZE); + flags.set(REACHABLITY_PROBLEM, tlv.getFlags().isP2mpUnreachable()); + flags.set(NO_GCO_SOLUTION, tlv.getFlags().isNoGcoSolution()); + flags.set(NO_GCO_MIGRATION_PATH, tlv.getFlags().isNoGcoMigration()); + flags.set(PATH_KEY, tlv.getFlags().isPathKey()); + flags.set(CHAIN_UNAVAILABLE, tlv.getFlags().isChainUnavailable()); + flags.set(UNKNOWN_SRC, tlv.getFlags().isUnknownSource()); + flags.set(UNKNOWN_DEST, tlv.getFlags().isUnknownDestination()); + flags.set(PCE_UNAVAILABLE, tlv.getFlags().isPceUnavailable()); + return TlvUtil.formatTlv(TYPE, ByteArray.bitSetToBytes(flags, FLAGS_F_LENGTH)); + } }