Removed ChannelSet.
Change-Id: I5ba886a0b321aa91f0a1f9e6645047806ade5ca9
Signed-off-by: Dana Kutenicsova <dkutenic@cisco.com>
import org.opendaylight.protocol.pcep.impl.subobject.EROLabelSubobjectParser;
import org.opendaylight.protocol.pcep.impl.subobject.EROPathKeySubobjectParser;
import org.opendaylight.protocol.pcep.impl.subobject.EROUnnumberedInterfaceSubobjectParser;
-import org.opendaylight.protocol.pcep.impl.subobject.GeneralizedLabelChannelSetParser;
import org.opendaylight.protocol.pcep.impl.subobject.GeneralizedLabelParser;
import org.opendaylight.protocol.pcep.impl.subobject.RROIpPrefixSubobjectParser;
import org.opendaylight.protocol.pcep.impl.subobject.RROLabelSubobjectParser;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.SvecObject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.SymbolicPathNameTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.AsNumberSubobject;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.GeneralizedChannelSetLabel;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.GeneralizedLabel;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.IpPrefixSubobject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.LabelSubobject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.SrlgSubobject;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.Type1Label;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.UnnumberedSubobject;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.WavebandSwitchingLabel;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.GeneralizedLabel;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.Type1Label;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.WavebandSwitchingLabel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
context.registerLabelParser(Type1LabelParser.CTYPE, new Type1LabelParser());
context.registerLabelParser(GeneralizedLabelParser.CTYPE, new GeneralizedLabelParser());
context.registerLabelParser(WavebandSwitchingLabelParser.CTYPE, new WavebandSwitchingLabelParser());
- context.registerLabelParser(GeneralizedLabelChannelSetParser.CTYPE, new GeneralizedLabelChannelSetParser());
context.registerLabelSerializer(Type1Label.class, new Type1LabelParser());
context.registerLabelSerializer(GeneralizedLabel.class, new GeneralizedLabelParser());
context.registerLabelSerializer(WavebandSwitchingLabel.class, new WavebandSwitchingLabelParser());
- context.registerLabelSerializer(GeneralizedChannelSetLabel.class, new GeneralizedLabelChannelSetParser());
final EROSubobjectHandlerRegistry eroSubReg = context.getEROSubobjectHandlerRegistry();
context.registerEROSubobjectParser(EROIpPrefixSubobjectParser.TYPE, new EROIpPrefixSubobjectParser());
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.Subobjects;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.SubobjectsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.CLabel;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.LabelSubobject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.Label;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.LabelBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.LabelType;
import com.google.common.base.Preconditions;
@Override
public Subobjects parseSubobject(final byte[] buffer, final boolean loose) throws PCEPDeserializerException {
- if (buffer == null || buffer.length == 0)
+ if (buffer == null || buffer.length == 0) {
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
- if (buffer.length < HEADER_LENGTH)
+ }
+ if (buffer.length < HEADER_LENGTH) {
throw new PCEPDeserializerException("Wrong length of array of bytes. Passed: " + buffer.length + "; Expected: >"
+ HEADER_LENGTH + ".");
-
+ }
final BitSet reserved = ByteArray.bytesToBitSet(Arrays.copyOfRange(buffer, RES_F_OFFSET, RES_F_LENGTH));
final short c_type = (short) (buffer[C_TYPE_F_OFFSET] & 0xFF);
if (parser == null) {
throw new PCEPDeserializerException("Unknown C-TYPE for ero label subobject. Passed: " + c_type);
}
-
final LabelBuilder builder = new LabelBuilder();
builder.setUniDirectional(reserved.get(U_FLAG_OFFSET));
builder.setLabelType(parser.parseLabel(ByteArray.cutBytes(buffer, HEADER_LENGTH)));
public byte[] serializeSubobject(final Subobjects subobject) {
Preconditions.checkNotNull(subobject.getSubobjectType(), "Subobject type cannot be empty.");
- final LabelSubobject label = (LabelSubobject) subobject.getSubobjectType();
-
- final LabelSerializer serializer = this.registry.getLabelSerializer((CLabel) label);
+ final Label label = (Label) subobject.getSubobjectType();
+ final LabelType l = label.getLabelType();
- if (serializer == null)
- throw new IllegalArgumentException("Unknown EROLabelSubobject instance. Passed " + label.getClass());
-
- final byte[] labelbytes = serializer.serializeLabel((CLabel) label);
+ final LabelSerializer serializer = this.registry.getLabelSerializer(l);
+ if (serializer == null) {
+ throw new IllegalArgumentException("Unknown EROLabelSubobject instance. Passed "
+ + label.getLabelType().getImplementedInterface());
+ }
+ final byte[] labelbytes = serializer.serializeLabel(l);
final byte[] retBytes = new byte[labelbytes.length + HEADER_LENGTH];
System.arraycopy(labelbytes, 0, retBytes, HEADER_LENGTH, labelbytes.length);
final BitSet reserved = new BitSet();
reserved.set(U_FLAG_OFFSET, label.isUniDirectional());
System.arraycopy(ByteArray.bitSetToBytes(reserved, RES_F_LENGTH), 0, retBytes, RES_F_OFFSET, RES_F_LENGTH);
-
retBytes[C_TYPE_F_OFFSET] = (byte) serializer.getType();
-
return retBytes;
}
+++ /dev/null
-/*
- * 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.impl.subobject;
-
-import java.util.List;
-
-import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.spi.LabelParser;
-import org.opendaylight.protocol.pcep.spi.LabelSerializer;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.CLabel;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.generalized.channel.set.label.Subobjects;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.generalized.channel.set.label.SubobjectsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.GeneralizedChannelSetLabel;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.GeneralizedChannelSetLabelBuilder;
-
-import com.google.common.collect.Lists;
-
-/**
- * Parser for {@link GeneralizedChannelSetLabel}
- */
-public class GeneralizedLabelChannelSetParser implements LabelParser, LabelSerializer {
-
- public static final int CTYPE = 4;
-
- @Override
- public GeneralizedChannelSetLabel parseLabel(final byte[] buffer) throws PCEPDeserializerException {
- if (buffer == null || buffer.length == 0) {
- throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
- }
- // FIXME: finish
- final List<Subobjects> list = Lists.newArrayList();
- final SubobjectsBuilder subs = new SubobjectsBuilder();
-
- return new GeneralizedChannelSetLabelBuilder().setSubobjects(list).build();
- }
-
- @Override
- public byte[] serializeLabel(final CLabel subobject) {
- if (!(subobject instanceof GeneralizedChannelSetLabel)) {
- throw new IllegalArgumentException("Unknown Label Subobject instance. Passed " + subobject.getClass()
- + ". Needed GeneralizedChannelSetLabel.");
- }
-
- // FIXME: finish
- return new byte[0];
- }
-
- @Override
- public int getType() {
- return CTYPE;
- }
-}
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.spi.LabelParser;
import org.opendaylight.protocol.pcep.spi.LabelSerializer;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.CLabel;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.GeneralizedLabel;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.LabelType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.GeneralizedLabel;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.GeneralizedLabelBuilder;
/**
}
@Override
- public byte[] serializeLabel(final CLabel subobject) {
+ public byte[] serializeLabel(final LabelType subobject) {
if (!(subobject instanceof GeneralizedLabel)) {
throw new IllegalArgumentException("Unknown Label Subobject instance. Passed " + subobject.getClass()
+ ". Needed GeneralizedLabel.");
}
- return ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.GeneralizedLabel) subobject).getGeneralizedLabel();
+ return ((GeneralizedLabel) subobject).getGeneralizedLabel();
}
@Override
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.Subobjects;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.SubobjectsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.CLabel;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.LabelSubobject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.LabelType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.record.route.subobjects.subobject.type.Label;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.record.route.subobjects.subobject.type.LabelBuilder;
import com.google.common.base.Preconditions;
public static final int HEADER_LENGTH = C_TYPE_F_OFFSET + C_TYPE_F_LENGTH;
public static final int U_FLAG_OFFSET = 0;
+ public static final int G_FLAG_OFFSET = 7;
private final LabelHandlerRegistry registry;
@Override
public Subobjects parseSubobject(final byte[] buffer) throws PCEPDeserializerException {
- if (buffer == null || buffer.length == 0)
+ if (buffer == null || buffer.length == 0) {
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
- if (buffer.length < HEADER_LENGTH)
+ }
+ if (buffer.length < HEADER_LENGTH) {
throw new PCEPDeserializerException("Wrong length of array of bytes. Passed: " + buffer.length + "; Expected: >"
+ HEADER_LENGTH + ".");
-
+ }
final BitSet reserved = ByteArray.bytesToBitSet(Arrays.copyOfRange(buffer, RES_F_OFFSET, RES_F_LENGTH));
final short c_type = (short) (buffer[C_TYPE_F_OFFSET] & 0xFF);
if (parser == null) {
throw new PCEPDeserializerException("Unknown C-TYPE for ero label subobject. Passed: " + c_type);
}
-
final LabelBuilder builder = new LabelBuilder();
builder.setUniDirectional(reserved.get(U_FLAG_OFFSET));
+ builder.setGlobal(reserved.get(G_FLAG_OFFSET));
builder.setLabelType(parser.parseLabel(ByteArray.cutBytes(buffer, HEADER_LENGTH)));
return new SubobjectsBuilder().setSubobjectType(builder.build()).build();
}
@Override
public byte[] serializeSubobject(final Subobjects subobject) {
- final LabelSubobject label = (LabelSubobject) subobject.getSubobjectType();
- final LabelSerializer parser = this.registry.getLabelSerializer((CLabel) label);
-
- if (parser == null)
+ final Label label = (Label) subobject.getSubobjectType();
+ final LabelType l = label.getLabelType();
+ final LabelSerializer parser = this.registry.getLabelSerializer(l);
+ if (parser == null) {
throw new IllegalArgumentException("Unknown RROLabelSubobject instance. Passed " + subobject.getSubobjectType().getClass());
-
- final byte[] labelbytes = parser.serializeLabel((CLabel) label);
-
+ }
+ final byte[] labelbytes = parser.serializeLabel(l);
final byte[] retBytes = new byte[labelbytes.length + HEADER_LENGTH];
-
System.arraycopy(labelbytes, 0, retBytes, HEADER_LENGTH, labelbytes.length);
final BitSet reserved = new BitSet();
reserved.set(U_FLAG_OFFSET, label.isUniDirectional());
+ reserved.set(G_FLAG_OFFSET, label.isGlobal());
System.arraycopy(ByteArray.bitSetToBytes(reserved, RES_F_LENGTH), 0, retBytes, RES_F_OFFSET, RES_F_LENGTH);
-
retBytes[C_TYPE_F_OFFSET] = (byte) parser.getType();
-
return retBytes;
}
import org.opendaylight.protocol.pcep.spi.LabelParser;
import org.opendaylight.protocol.pcep.spi.LabelSerializer;
import org.opendaylight.protocol.util.ByteArray;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.CLabel;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.Type1Label;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.LabelType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.Type1Label;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.Type1LabelBuilder;
import com.google.common.primitives.UnsignedInts;
@Override
public LabelType parseLabel(final byte[] buffer) throws PCEPDeserializerException {
- if (buffer == null || buffer.length == 0)
+ if (buffer == null || buffer.length == 0) {
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
- if (buffer.length != LABEL_LENGTH)
+ }
+ if (buffer.length != LABEL_LENGTH) {
throw new PCEPDeserializerException("Wrong length of array of bytes. Passed: " + buffer.length + "; Expected: " + LABEL_LENGTH
+ ".");
-
+ }
return new Type1LabelBuilder().setType1Label(UnsignedInts.toLong(ByteArray.bytesToInt(buffer))).build();
}
@Override
- public byte[] serializeLabel(final CLabel subobject) {
- if (!(subobject instanceof Type1Label))
+ public byte[] serializeLabel(final LabelType subobject) {
+ if (!(subobject instanceof Type1Label)) {
throw new IllegalArgumentException("Unknown Label Subobject instance. Passed " + subobject.getClass() + ". Needed Type1Label.");
-
- return ByteArray.longToBytes(((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.Type1Label) subobject).getType1Label().longValue());
+ }
+ return ByteArray.subByte(ByteArray.longToBytes(((Type1Label) subobject).getType1Label().longValue()), 4, LABEL_LENGTH);
}
@Override
import org.opendaylight.protocol.pcep.spi.LabelParser;
import org.opendaylight.protocol.pcep.spi.LabelSerializer;
import org.opendaylight.protocol.util.ByteArray;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.CLabel;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.WavebandSwitchingLabel;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.LabelType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.WavebandSwitchingLabel;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.WavebandSwitchingLabelBuilder;
+/**
+ * Parser for {@link WavebandSwitchingLabel}
+ */
public class WavebandSwitchingLabelParser implements LabelParser, LabelSerializer {
public static final int CTYPE = 3;
- private static int WAVEB_F_LENGTH = 4;
- private static int START_F_LENGTH = 4;
- private static int END_F_LENGTH = 4;
+ private static final int WAVEB_F_LENGTH = 4;
+ private static final int START_F_LENGTH = 4;
+ private static final int END_F_LENGTH = 4;
- private static int CONTENT_LENGTH = WAVEB_F_LENGTH + START_F_LENGTH + END_F_LENGTH;
+ private static final int CONTENT_LENGTH = WAVEB_F_LENGTH + START_F_LENGTH + END_F_LENGTH;
@Override
- public LabelType parseLabel(final byte[] buffer) throws PCEPDeserializerException {
- if (buffer == null || buffer.length == 0)
+ public WavebandSwitchingLabel parseLabel(final byte[] buffer) throws PCEPDeserializerException {
+ if (buffer == null || buffer.length == 0) {
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
-
- if (buffer.length != CONTENT_LENGTH)
+ }
+ if (buffer.length != CONTENT_LENGTH) {
throw new PCEPDeserializerException("Wrong length of array of bytes. Passed: " + buffer.length + "; Expected: "
+ CONTENT_LENGTH + ".");
-
+ }
final WavebandSwitchingLabelBuilder builder = new WavebandSwitchingLabelBuilder();
-
int byteOffset = 0;
builder.setWavebandId(ByteArray.bytesToLong(ByteArray.subByte(buffer, byteOffset, WAVEB_F_LENGTH)));
byteOffset += WAVEB_F_LENGTH;
builder.setStartLabel(ByteArray.bytesToLong(ByteArray.subByte(buffer, byteOffset, START_F_LENGTH)));
byteOffset += START_F_LENGTH;
builder.setEndLabel(ByteArray.bytesToLong(ByteArray.subByte(buffer, byteOffset, END_F_LENGTH)));
-
return builder.build();
}
@Override
- public byte[] serializeLabel(final CLabel subobject) {
- if (!(subobject instanceof WavebandSwitchingLabel))
+ public byte[] serializeLabel(final LabelType subobject) {
+ if (!(subobject instanceof WavebandSwitchingLabel)) {
throw new IllegalArgumentException("Unknown Label Subobject instance. Passed " + subobject.getClass()
+ ". Needed WavebandSwitchingLabel.");
+ }
final byte[] retBytes = new byte[CONTENT_LENGTH];
-
final WavebandSwitchingLabel obj = (WavebandSwitchingLabel) subobject;
-
System.arraycopy(ByteArray.intToBytes(obj.getWavebandId().intValue()), 0, retBytes, 0, WAVEB_F_LENGTH);
System.arraycopy(ByteArray.intToBytes(obj.getStartLabel().intValue()), 0, retBytes, WAVEB_F_LENGTH, START_F_LENGTH);
System.arraycopy(ByteArray.intToBytes(obj.getEndLabel().intValue()), 0, retBytes, WAVEB_F_LENGTH + START_F_LENGTH, END_F_LENGTH);
-
return retBytes;
}
import org.junit.Test;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.impl.subobject.GeneralizedLabelParser;
+import org.opendaylight.protocol.pcep.impl.subobject.Type1LabelParser;
+import org.opendaylight.protocol.pcep.impl.subobject.WavebandSwitchingLabelParser;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.GeneralizedLabelBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.Type1LabelBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.WavebandSwitchingLabelBuilder;
public class LabelSubobjectParserTest {
- private final byte[] generalizedLabelBytes = { (byte) 0x12, (byte) 0x00, (byte) 0x25, (byte) 0xFF };
+ private static final byte[] generalizedLabelBytes = { (byte) 0x12, (byte) 0x00, (byte) 0x25, (byte) 0xFF };
+
+ private static final byte[] wavebandLabelBytes = { (byte) 0x00, (byte) 0x00, (byte) 0x12, (byte) 0x34, (byte) 0x00, (byte) 0x00,
+ (byte) 0x99, (byte) 0x99, (byte) 0x00, (byte) 0x00, (byte) 0x11, (byte) 0x11 };
@Test
public void testGeneralizedLabel() throws PCEPDeserializerException {
final GeneralizedLabelParser parser = new GeneralizedLabelParser();
final GeneralizedLabelBuilder builder = new GeneralizedLabelBuilder();
- builder.setGeneralizedLabel(this.generalizedLabelBytes);
- assertEquals(builder.build(), parser.parseLabel(this.generalizedLabelBytes));
- assertArrayEquals(this.generalizedLabelBytes, parser.serializeLabel(builder.build()));
+ builder.setGeneralizedLabel(generalizedLabelBytes);
+ assertEquals(builder.build(), parser.parseLabel(generalizedLabelBytes));
+ assertArrayEquals(generalizedLabelBytes, parser.serializeLabel(builder.build()));
+ }
+
+ @Test
+ public void testWavebandLabel() throws PCEPDeserializerException {
+ final WavebandSwitchingLabelParser parser = new WavebandSwitchingLabelParser();
+ final WavebandSwitchingLabelBuilder builder = new WavebandSwitchingLabelBuilder();
+ builder.setWavebandId(0x1234L);
+ builder.setStartLabel(0x9999L);
+ builder.setEndLabel(0x1111L);
+ assertEquals(builder.build(), parser.parseLabel(wavebandLabelBytes));
+ assertArrayEquals(wavebandLabelBytes, parser.serializeLabel(builder.build()));
+ }
+
+ @Test
+ public void testTypeOneLabel() throws PCEPDeserializerException {
+ final Type1LabelParser parser = new Type1LabelParser();
+ final Type1LabelBuilder builder = new Type1LabelBuilder();
+ builder.setType1Label(0x120025ffL);
+ assertEquals(builder.build(), parser.parseLabel(generalizedLabelBytes));
+ assertArrayEquals(generalizedLabelBytes, parser.serializeLabel(builder.build()));
}
}
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
-import org.junit.Ignore;
import org.junit.Test;
import org.opendaylight.protocol.concepts.Ipv6Util;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.impl.subobject.EROAsNumberSubobjectParser;
import org.opendaylight.protocol.pcep.impl.subobject.EROIpPrefixSubobjectParser;
+import org.opendaylight.protocol.pcep.impl.subobject.EROLabelSubobjectParser;
import org.opendaylight.protocol.pcep.impl.subobject.EROPathKeySubobjectParser;
import org.opendaylight.protocol.pcep.impl.subobject.EROUnnumberedInterfaceSubobjectParser;
+import org.opendaylight.protocol.pcep.spi.pojo.PCEPExtensionProviderContextImpl;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.subobjects.subobject.type.PathKeyBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.AsNumberBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.IpPrefixBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.LabelBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.UnnumberedBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.GeneralizedLabelBuilder;
public class PCEPEROSubobjectParserTest {
private static final byte[] ip4PrefixBytes = { (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0x16, (byte) 0x00 };
private static final byte[] pathKey128Bytes = { (byte) 0x12, (byte) 0x34, (byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78,
(byte) 0x9A, (byte) 0xBC, (byte) 0xDE, (byte) 0x12, (byte) 0x34, (byte) 0x54, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00 };
+ private static final byte[] labelBytes = { (byte) 0x80, (byte) 0x02, (byte) 0x12, (byte) 0x00, (byte) 0x25, (byte) 0xFF };
@Test
public void testEROIp4PrefixSubobject() throws PCEPDeserializerException {
}
@Test
- @Ignore
+ public void testEroLabelSubobject() throws Exception {
+ final EROLabelSubobjectParser parser = new EROLabelSubobjectParser(PCEPExtensionProviderContextImpl.create().getLabelHandlerRegistry());
+ final SubobjectsBuilder subs = new SubobjectsBuilder();
+ subs.setLoose(true);
+ subs.setSubobjectType(new LabelBuilder().setUniDirectional(true).setLabelType(
+ new GeneralizedLabelBuilder().setGeneralizedLabel(new byte[] { (byte) 0x12, (byte) 0x00, (byte) 0x25, (byte) 0xFF }).build()).build());
+ assertEquals(subs.build(), parser.parseSubobject(labelBytes, true));
+ assertArrayEquals(labelBytes, parser.serializeSubobject(subs.build()));
+ }
+
public void testEROSubojectsSerDeserWithoutBin() throws PCEPDeserializerException {
- // objsToTest.add(new EROType1LabelSubobject(0xFFFF51F2L, true, false));
- // objsToTest.add(new EROType1LabelSubobject(0x12345648L, false, true));
- // objsToTest.add(new EROWavebandSwitchingLabelSubobject(0x12345678L, 0x87654321L, 0xFFFFFFFFL, false, false));
// objsToTest.add(new EROExplicitExclusionRouteSubobject(Arrays.asList((ExcludeRouteSubobject) new
// XROAsNumberSubobject(new AsNumber((long) 2588), true))));
}
import org.opendaylight.protocol.concepts.Ipv6Util;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.impl.subobject.RROIpPrefixSubobjectParser;
+import org.opendaylight.protocol.pcep.impl.subobject.RROLabelSubobjectParser;
import org.opendaylight.protocol.pcep.impl.subobject.RROPathKeySubobjectParser;
import org.opendaylight.protocol.pcep.impl.subobject.RROUnnumberedInterfaceSubobjectParser;
+import org.opendaylight.protocol.pcep.spi.pojo.PCEPExtensionProviderContextImpl;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.PathKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.PceId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.SubobjectsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.subobjects.subobject.type.PathKeyBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.GeneralizedLabelBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.record.route.subobjects.subobject.type.IpPrefixBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.record.route.subobjects.subobject.type.LabelBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.record.route.subobjects.subobject.type.UnnumberedBuilder;
public class PCEPRROSubobjectParserTest {
private static final byte[] pathKey128Bytes = { (byte) 0x12, (byte) 0x34, (byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78,
(byte) 0x9A, (byte) 0xBC, (byte) 0xDE, (byte) 0x12, (byte) 0x34, (byte) 0x54, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00 };
+ private static final byte[] labelBytes = { (byte) 0x81, (byte) 0x02, (byte) 0x12, (byte) 0x00, (byte) 0x25, (byte) 0xFF };
@Test
public void testRROIp4PrefixSubobject() throws PCEPDeserializerException {
assertEquals(subs.build(), parser.parseSubobject(pathKey128Bytes));
assertArrayEquals(pathKey128Bytes, parser.serializeSubobject(subs.build()));
}
+
+ @Test
+ public void testRROLabelSubobject() throws Exception {
+ final RROLabelSubobjectParser parser = new RROLabelSubobjectParser(PCEPExtensionProviderContextImpl.create().getLabelHandlerRegistry());
+ final SubobjectsBuilder subs = new SubobjectsBuilder();
+ subs.setSubobjectType(new LabelBuilder().setUniDirectional(true).setGlobal(true).setLabelType(
+ new GeneralizedLabelBuilder().setGeneralizedLabel(new byte[] { (byte) 0x12, (byte) 0x00, (byte) 0x25, (byte) 0xFF }).build()).build());
+ assertEquals(subs.build(), parser.parseSubobject(labelBytes));
+ assertArrayEquals(labelBytes, parser.serializeSubobject(subs.build()));
+ }
}
*/
package org.opendaylight.protocol.pcep.spi;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.CLabel;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.LabelType;
public interface LabelHandlerRegistry {
public LabelParser getLabelParser(int cType);
- public LabelSerializer getLabelSerializer(CLabel label);
+
+ public LabelSerializer getLabelSerializer(LabelType label);
}
*/
package org.opendaylight.protocol.pcep.spi;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.CLabel;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.LabelType;
public interface LabelSerializer {
@Deprecated
public int getType();
- public byte[] serializeLabel(CLabel subobject);
+ public byte[] serializeLabel(LabelType subobject);
}
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.Tlv;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.CLabel;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.CSubobject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.LabelType;
public interface PCEPExtensionProviderContext extends PCEPExtensionConsumerContext {
- public AutoCloseable registerLabelSerializer(Class<? extends CLabel> labelClass, LabelSerializer serializer);
+ public AutoCloseable registerLabelSerializer(Class<? extends LabelType> labelClass, LabelSerializer serializer);
+
public AutoCloseable registerLabelParser(int cType, LabelParser parser);
public AutoCloseable registerEROSubobjectParser(int subobjectType, EROSubobjectParser parser);
+
public AutoCloseable registerEROSubobjectSerializer(Class<? extends CSubobject> subobjectClass, EROSubobjectSerializer serializer);
public AutoCloseable registerMessageParser(int messageType, MessageParser parser);
+
public AutoCloseable registerMessageSerializer(Class<? extends Message> msgClass, MessageSerializer serializer);
public AutoCloseable registerObjectParser(int objectClass, int objectType, ObjectParser parser);
+
public AutoCloseable registerObjectSerializer(Class<? extends Object> objClass, ObjectSerializer serializer);
public AutoCloseable registerRROSubobjectParser(int subobjectType, RROSubobjectParser parser);
+
public AutoCloseable registerRROSubobjectSerializer(Class<? extends CSubobject> subobjectClass, RROSubobjectSerializer serializer);
public AutoCloseable registerTlvSerializer(Class<? extends Tlv> tlvClass, TlvSerializer serializer);
+
public AutoCloseable registerTlvParser(int tlvType, TlvParser parser);
public AutoCloseable registerXROSubobjectSerializer(Class<? extends CSubobject> subobjectClass, XROSubobjectSerializer serializer);
+
public AutoCloseable registerXROSubobjectParser(int subobjectType, XROSubobjectParser parser);
}
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.Tlv;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.CLabel;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.CSubobject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.LabelType;
import org.osgi.framework.BundleContext;
class OSGiPCEPExtensionProviderContext extends OSGiPCEPExtensionConsumerContext implements PCEPExtensionProviderContext {
}
@Override
- public AutoCloseable registerLabelSerializer(final Class<? extends CLabel> labelClass, final LabelSerializer serializer) {
+ public AutoCloseable registerLabelSerializer(final Class<? extends LabelType> labelClass, final LabelSerializer serializer) {
// TODO Auto-generated method stub
return null;
}
}
@Override
- public AutoCloseable registerEROSubobjectSerializer(final Class<? extends CSubobject> subobjectClass, final EROSubobjectSerializer serializer) {
+ public AutoCloseable registerEROSubobjectSerializer(final Class<? extends CSubobject> subobjectClass,
+ final EROSubobjectSerializer serializer) {
// TODO Auto-generated method stub
return null;
}
}
@Override
- public AutoCloseable registerRROSubobjectSerializer(final Class<? extends CSubobject> subobjectClass, final RROSubobjectSerializer serializer) {
+ public AutoCloseable registerRROSubobjectSerializer(final Class<? extends CSubobject> subobjectClass,
+ final RROSubobjectSerializer serializer) {
// TODO Auto-generated method stub
return null;
}
}
@Override
- public AutoCloseable registerXROSubobjectSerializer(final Class<? extends CSubobject> subobjectClass, final XROSubobjectSerializer serializer) {
+ public AutoCloseable registerXROSubobjectSerializer(final Class<? extends CSubobject> subobjectClass,
+ final XROSubobjectSerializer serializer) {
// TODO Auto-generated method stub
return null;
}
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.Tlv;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.CLabel;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.CSubobject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.LabelType;
/**
*
static {
try {
INSTANCE = PCEPExtensionProviderContextImpl.create();
- } catch (Exception e) {
+ } catch (final Exception e) {
throw new ExceptionInInitializerError(e);
}
}
final PCEPExtensionProviderContext ctx = new PCEPExtensionProviderContextImpl();
final ServiceLoader<PCEPExtensionProviderActivator> loader = ServiceLoader.load(PCEPExtensionProviderActivator.class);
- for (PCEPExtensionProviderActivator a : loader) {
+ for (final PCEPExtensionProviderActivator a : loader) {
a.start(ctx);
}
@Override
public LabelHandlerRegistry getLabelHandlerRegistry() {
- return labelReg;
+ return this.labelReg;
}
@Override
}
@Override
- public AutoCloseable registerLabelSerializer(final Class<? extends CLabel> labelClass, final LabelSerializer serializer) {
- return labelReg.registerLabelSerializer(labelClass, serializer);
+ public AutoCloseable registerLabelSerializer(final Class<? extends LabelType> labelClass, final LabelSerializer serializer) {
+ return this.labelReg.registerLabelSerializer(labelClass, serializer);
}
@Override
public AutoCloseable registerLabelParser(final int cType, final LabelParser parser) {
- return labelReg.registerLabelParser(cType, parser);
+ return this.labelReg.registerLabelParser(cType, parser);
}
@Override
public AutoCloseable registerEROSubobjectParser(final int subobjectType, final EROSubobjectParser parser) {
- return eroSubReg.registerSubobjectParser(subobjectType, parser);
+ return this.eroSubReg.registerSubobjectParser(subobjectType, parser);
}
@Override
- public AutoCloseable registerEROSubobjectSerializer(final Class<? extends CSubobject> subobjectClass, final EROSubobjectSerializer serializer) {
- return eroSubReg.registerSubobjectSerializer(subobjectClass, serializer);
+ public AutoCloseable registerEROSubobjectSerializer(final Class<? extends CSubobject> subobjectClass,
+ final EROSubobjectSerializer serializer) {
+ return this.eroSubReg.registerSubobjectSerializer(subobjectClass, serializer);
}
@Override
public AutoCloseable registerMessageParser(final int messageType, final MessageParser parser) {
- return msgReg.registerMessageParser(messageType, parser);
+ return this.msgReg.registerMessageParser(messageType, parser);
}
@Override
public AutoCloseable registerMessageSerializer(final Class<? extends Message> msgClass, final MessageSerializer serializer) {
- return msgReg.registerMessageSerializer(msgClass, serializer);
+ return this.msgReg.registerMessageSerializer(msgClass, serializer);
}
@Override
public AutoCloseable registerObjectParser(final int objectClass, final int objectType, final ObjectParser parser) {
- return objReg.registerObjectParser(objectClass, objectType, parser);
+ return this.objReg.registerObjectParser(objectClass, objectType, parser);
}
@Override
public AutoCloseable registerObjectSerializer(final Class<? extends Object> objClass, final ObjectSerializer serializer) {
- return objReg.registerObjectSerializer(objClass, serializer);
+ return this.objReg.registerObjectSerializer(objClass, serializer);
}
@Override
public AutoCloseable registerRROSubobjectParser(final int subobjectType, final RROSubobjectParser parser) {
- return rroSubReg.registerSubobjectParser(subobjectType, parser);
+ return this.rroSubReg.registerSubobjectParser(subobjectType, parser);
}
@Override
- public AutoCloseable registerRROSubobjectSerializer(final Class<? extends CSubobject> subobjectClass, final RROSubobjectSerializer serializer) {
- return rroSubReg.registerSubobjectSerializer(subobjectClass, serializer);
+ public AutoCloseable registerRROSubobjectSerializer(final Class<? extends CSubobject> subobjectClass,
+ final RROSubobjectSerializer serializer) {
+ return this.rroSubReg.registerSubobjectSerializer(subobjectClass, serializer);
}
@Override
public AutoCloseable registerTlvParser(final int tlvType, final TlvParser parser) {
- return tlvReg.registerTlvParser(tlvType, parser);
+ return this.tlvReg.registerTlvParser(tlvType, parser);
}
@Override
public AutoCloseable registerTlvSerializer(final Class<? extends Tlv> tlvClass, final TlvSerializer serializer) {
- return tlvReg.registerTlvSerializer(tlvClass, serializer);
+ return this.tlvReg.registerTlvSerializer(tlvClass, serializer);
}
@Override
public AutoCloseable registerXROSubobjectParser(final int subobjectType, final XROSubobjectParser parser) {
- return xroSubReg.registerSubobjectParser(subobjectType, parser);
+ return this.xroSubReg.registerSubobjectParser(subobjectType, parser);
}
@Override
- public AutoCloseable registerXROSubobjectSerializer(final Class<? extends CSubobject> subobjectClass, final XROSubobjectSerializer serializer) {
- return xroSubReg.registerSubobjectSerializer(subobjectClass, serializer);
+ public AutoCloseable registerXROSubobjectSerializer(final Class<? extends CSubobject> subobjectClass,
+ final XROSubobjectSerializer serializer) {
+ return this.xroSubReg.registerSubobjectSerializer(subobjectClass, serializer);
}
}
import org.opendaylight.protocol.pcep.spi.LabelParser;
import org.opendaylight.protocol.pcep.spi.LabelSerializer;
import org.opendaylight.protocol.util.Util;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.CLabel;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.LabelType;
import org.opendaylight.yangtools.yang.binding.DataContainer;
import com.google.common.base.Preconditions;
return this.handlers.registerParser(cType, parser);
}
- public AutoCloseable registerLabelSerializer(final Class<? extends CLabel> labelClass, final LabelSerializer serializer) {
+ public AutoCloseable registerLabelSerializer(final Class<? extends LabelType> labelClass, final LabelSerializer serializer) {
return this.handlers.registerSerializer(labelClass, serializer);
}
}
@Override
- public LabelSerializer getLabelSerializer(final CLabel label) {
+ public LabelSerializer getLabelSerializer(final LabelType label) {
return this.handlers.getSerializer(label.getImplementedInterface());
}
}
}
}
- grouping generalized-channel-set-label {
- reference "https://tools.ietf.org/html/rfc6002#section-3.2";
-
- uses c-label;
-
- list subobjects {
- uses label-set;
- }
- }
-
//marker
grouping c-subobject {
case waveband-switching-label {
uses waveband-switching-label;
}
- case generalized-channel-set-label {
- uses generalized-channel-set-label;
- }
}
}