import java.util.List;
import java.util.Map.Entry;
import org.opendaylight.protocol.bgp.linkstate.attribute.sr.BindingSidLabelParser;
+import org.opendaylight.protocol.bgp.linkstate.attribute.sr.Ipv6SrPrefixAttributesParser;
import org.opendaylight.protocol.bgp.linkstate.attribute.sr.RangeTlvParser;
import org.opendaylight.protocol.bgp.linkstate.attribute.sr.SrPrefixAttributesParser;
import org.opendaylight.protocol.bgp.linkstate.spi.TlvUtil;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.linkstate.path.attribute.link.state.attribute.prefix.attributes._case.PrefixAttributesBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.IgpBits;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.IgpBitsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.Ipv6SrPrefix;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.SrBindingSidLabels;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.SrPrefix;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.SrRange;
/* Segment routing TLV */
public static final int PREFIX_SID = 1158;
+ public static final int IPV6_PREFIX_SID = 1169;
public static final int RANGE = 1159;
public static final int BINDING_SID = 1160;
builder.setSrPrefix(prefix);
LOG.debug("Parsed SR Prefix: {}", prefix);
break;
+ case IPV6_PREFIX_SID:
+ final Ipv6SrPrefix ipv6Prefix = Ipv6SrPrefixAttributesParser.parseSrIpv6Prefix(value);
+ builder.setIpv6SrPrefix(ipv6Prefix);
+ LOG.debug("Parsed Ipv6 SR Prefix: {}", ipv6Prefix);
+ break;
case RANGE:
final SrRange range = RangeTlvParser.parseSrRange(value, protocolId);
builder.setSrRange(range);
SrPrefixAttributesParser.serializeSrPrefix(prefixAtrributes.getSrPrefix(), buffer);
TlvUtil.writeTLV(PREFIX_SID, buffer, byteAggregator);
}
+ if (prefixAtrributes.getIpv6SrPrefix() != null) {
+ final ByteBuf buffer = Unpooled.buffer();
+ Ipv6SrPrefixAttributesParser.serializeIpv6SrPrefix(prefixAtrributes.getIpv6SrPrefix(), buffer);
+ TlvUtil.writeTLV(IPV6_PREFIX_SID, buffer, byteAggregator);
+ }
if (prefixAtrributes.getSrRange() != null) {
final ByteBuf sidBuffer = Unpooled.buffer();
RangeTlvParser.serializeSrRange(prefixAtrributes.getSrRange(), sidBuffer);
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.ProtocolId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.Ipv6SrPrefix;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.SrBindingSidLabels;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.SrBindingSidLabelsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.SrPrefix;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.binding.sub.tlvs.binding.sub.tlv.Ipv6EroBackupCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.binding.sub.tlvs.binding.sub.tlv.Ipv6EroCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.binding.sub.tlvs.binding.sub.tlv.Ipv6EroCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.binding.sub.tlvs.binding.sub.tlv.Ipv6PrefixSidCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.binding.sub.tlvs.binding.sub.tlv.Ipv6PrefixSidCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.binding.sub.tlvs.binding.sub.tlv.PrefixSidCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.binding.sub.tlvs.binding.sub.tlv.PrefixSidCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.binding.sub.tlvs.binding.sub.tlv.SidLabelCase;
}
private static Flags parseBindingSidFlags(final BitArray flags, final ProtocolId protocol) {
- if (protocol.equals(ProtocolId.IsisLevel1) || protocol.equals(ProtocolId.IsisLevel2)) {
- return new IsisBindingFlagsCaseBuilder()
- .setAddressFamily(flags.get(AFI))
- .setMirrorContext(flags.get(MIRROR_CONTEXT))
- .setSpreadTlv(flags.get(SPREAD_TLV))
- .setLeakedFromLevel2(flags.get(LEAKED))
- .setAttachedFlag(flags.get(ATTACHED)).build();
- } else if (protocol.equals(ProtocolId.Ospf)) {
- return new OspfBindingFlagsCaseBuilder()
- .setMirroring(flags.get(MIRROR_CONTEXT_OSPF)).build();
+ switch (protocol) {
+ case IsisLevel1:
+ case IsisLevel2:
+ return new IsisBindingFlagsCaseBuilder().setAddressFamily(flags.get(AFI)).setMirrorContext(flags.get(MIRROR_CONTEXT))
+ .setSpreadTlv(flags.get(SPREAD_TLV)).setLeakedFromLevel2(flags.get(LEAKED)).setAttachedFlag(flags.get(ATTACHED)).build();
+ case Ospf:
+ case OspfV3:
+ return new OspfBindingFlagsCaseBuilder().setMirroring(flags.get(MIRROR_CONTEXT_OSPF)).build();
+ default:
+ return null;
}
- return null;
}
private static List<BindingSubTlvs> parseBindingSubTlvs(final ByteBuf buffer, final ProtocolId protocolId) {
.setFlags(prefix.getFlags())
.setSidLabelIndex(prefix.getSidLabelIndex()).build());
break;
+ case PrefixAttributesParser.IPV6_PREFIX_SID:
+ final Ipv6SrPrefix ipv6Prefix = Ipv6SrPrefixAttributesParser.parseSrIpv6Prefix(slice);
+ builder.setBindingSubTlv(new Ipv6PrefixSidCaseBuilder().setAlgorithm(ipv6Prefix.getAlgorithm()).build());
+ break;
case ERO_METRIC:
builder.setBindingSubTlv(new EroMetricCaseBuilder()
.setEroMetric(new TeMetric(slice.readUnsignedInt())).build());
}
}
- public static void serializeBindingSidAttributes(final Weight weight, final Flags flags, final List<BindingSubTlvs> bindingSubTlvs, final ByteBuf aggregator) {
+ static void serializeBindingSidAttributes(final Weight weight, final Flags flags, final List<BindingSubTlvs> bindingSubTlvs, final ByteBuf aggregator) {
aggregator.writeByte(weight.getValue());
final BitArray bitFlags = serializeBindingSidFlags(flags);
bitFlags.toByteBuf(aggregator);
final PrefixSidCase prefix = (PrefixSidCase) bindingSubTlv;
SrPrefixAttributesParser.serializePrefixAttributes(prefix.getFlags(), prefix.getAlgorithm(), prefix.getSidLabelIndex(), buffer);
TlvUtil.writeTLV(PrefixAttributesParser.PREFIX_SID, buffer, aggregator);
+ } else if (bindingSubTlv instanceof Ipv6PrefixSidCase) {
+ final Ipv6PrefixSidCase prefix = (Ipv6PrefixSidCase) bindingSubTlv;
+ Ipv6SrPrefixAttributesParser.serializePrefixAttributes(prefix.getAlgorithm(), buffer);
+ TlvUtil.writeTLV(PrefixAttributesParser.IPV6_PREFIX_SID, buffer, aggregator);
} else if (bindingSubTlv instanceof EroMetricCase) {
buffer.writeInt(((EroMetricCase) bindingSubTlv).getEroMetric().getValue().intValue());
TlvUtil.writeTLV(ERO_METRIC, buffer, aggregator);
--- /dev/null
+/*
+ * 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.bgp.linkstate.attribute.sr;
+
+
+import io.netty.buffer.ByteBuf;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.Ipv6SrPrefix;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.Ipv6SrPrefixBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.Algorithm;
+
+public final class Ipv6SrPrefixAttributesParser {
+ private static final int FLAGS_SIZE = 2;
+
+ private Ipv6SrPrefixAttributesParser() {
+ throw new UnsupportedOperationException();
+ }
+
+ public static Ipv6SrPrefix parseSrIpv6Prefix(final ByteBuf buffer) {
+ final Ipv6SrPrefixBuilder builder = new Ipv6SrPrefixBuilder();
+ buffer.skipBytes(FLAGS_SIZE);
+ builder.setAlgorithm(Algorithm.forValue(buffer.readUnsignedByte()));
+ return builder.build();
+ }
+
+ public static void serializePrefixAttributes(final Algorithm algorithm, final ByteBuf buffer) {
+ buffer.writeZero(FLAGS_SIZE);
+ buffer.writeByte(algorithm.getIntValue());
+ }
+
+ public static void serializeIpv6SrPrefix(final Ipv6SrPrefix ipv6SrPrefix, final ByteBuf buffer) {
+ serializePrefixAttributes(ipv6SrPrefix.getAlgorithm(), buffer);
+ }
+}
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.range.sub.tlvs.RangeSubTlv;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.range.sub.tlvs.range.sub.tlv.BindingSidTlvCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.range.sub.tlvs.range.sub.tlv.BindingSidTlvCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.range.sub.tlvs.range.sub.tlv.Ipv6PrefixSidTlvCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.range.sub.tlvs.range.sub.tlv.Ipv6PrefixSidTlvCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.range.sub.tlvs.range.sub.tlv.PrefixSidTlvCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.range.sub.tlvs.range.sub.tlv.PrefixSidTlvCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev151014.range.sub.tlvs.range.sub.tlv.SidLabelTlvCase;
case PrefixAttributesParser.PREFIX_SID:
subTlvCase = new PrefixSidTlvCaseBuilder(SrPrefixAttributesParser.parseSrPrefix(buffer.readSlice(length), protocolId)).build();
break;
+ case PrefixAttributesParser.IPV6_PREFIX_SID:
+ subTlvCase = new Ipv6PrefixSidTlvCaseBuilder(Ipv6SrPrefixAttributesParser.parseSrIpv6Prefix(buffer.readSlice(length))).build();
+ break;
case PrefixAttributesParser.BINDING_SID:
subTlvCase = new BindingSidTlvCaseBuilder(BindingSidLabelParser.parseBindingSidLabel(buffer.readSlice(length), protocolId)).build();
break;
prefixSidTlv.getSidLabelIndex(),
buffer);
TlvUtil.writeTLV(PrefixAttributesParser.PREFIX_SID, buffer, aggregator);
+ } else if (rangeSubTlv instanceof Ipv6PrefixSidTlvCase) {
+ final Ipv6PrefixSidTlvCase prefixSidTlv = (Ipv6PrefixSidTlvCase) rangeSubTlv;
+ Ipv6SrPrefixAttributesParser.serializePrefixAttributes(prefixSidTlv.getAlgorithm(), buffer);
+ TlvUtil.writeTLV(PrefixAttributesParser.IPV6_PREFIX_SID, buffer, aggregator);
} else if (rangeSubTlv instanceof BindingSidTlvCase) {
final BindingSidTlvCase rangeTlv = (BindingSidTlvCase) rangeSubTlv;
BindingSidLabelParser.serializeBindingSidAttributes(
*/
package org.opendaylight.protocol.bgp.linkstate.attribute.sr;
+import static org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.ProtocolId.Ospf;
+import static org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.ProtocolId.OspfV3;
+
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import java.util.List;
srLanAdjIdBuilder.setFlags(parseFlags(flags, protocolId));
srLanAdjIdBuilder.setWeight(new Weight(buffer.readUnsignedByte()));
buffer.skipBytes(RESERVED);
- if (protocolId.equals(ProtocolId.IsisLevel1) || protocolId.equals(ProtocolId.IsisLevel2)) {
+ switch (protocolId) {
+ case IsisLevel1:
+ case IsisLevel2:
srLanAdjIdBuilder.setIsoSystemId(new IsoSystemIdentifier(ByteArray.readBytes(buffer, ISO_SYSTEM_ID_SIZE)));
- } else if (protocolId.equals(ProtocolId.Ospf)) {
+ break;
+ case Ospf:
+ case OspfV3:
srLanAdjIdBuilder.setNeighborId(Ipv4Util.addressForByteBuf(buffer));
+ break;
}
// length determines a type of next field, which is used for parsing
srLanAdjIdBuilder.setSidLabelIndex(SidLabelIndexParser.parseSidLabelIndex(Size.forValue(buffer.readableBytes()), buffer));
if (protocol == null) {
return null;
}
- if (protocol.equals(ProtocolId.IsisLevel1) || protocol.equals(ProtocolId.IsisLevel2)) {
- return new IsisAdjFlagsCaseBuilder()
- .setAddressFamily(flags.get(ADDRESS_FAMILY_FLAG))
- .setBackup(flags.get(BACKUP_ISIS))
+ switch (protocol) {
+ case IsisLevel1:
+ case IsisLevel2:
+ return new IsisAdjFlagsCaseBuilder().setAddressFamily(flags.get(ADDRESS_FAMILY_FLAG)).setBackup(flags.get(BACKUP_ISIS))
.setSet(flags.get(SET_ISIS)).build();
- } else if (protocol.equals(ProtocolId.Ospf)) {
- return new OspfAdjFlagsCaseBuilder()
- .setBackup(flags.get(BACKUP_OSPF))
- .setSet(flags.get(SET_OSPF)).build();
+ case Ospf:
+ case OspfV3:
+ return new OspfAdjFlagsCaseBuilder().setBackup(flags.get(BACKUP_OSPF)).setSet(flags.get(SET_OSPF)).build();
+ default:
+ return null;
}
- return null;
}
public static <T extends AdjSidTlv> void serializeAdjacencySegmentIdentifiers(final List<T> adjSids, final int type, final ByteBuf byteAggregator) {
}
private static Flags parsePrefixFlags(final BitArray flags, final ProtocolId protocol) {
- if (protocol.equals(ProtocolId.IsisLevel1) || protocol.equals(ProtocolId.IsisLevel2)) {
- return new IsisPrefixFlagsCaseBuilder()
- .setReadvertisement(flags.get(RE_ADVERTISEMENT))
- .setNodeSid(flags.get(NODE_SID))
- .setNoPhp(flags.get(NO_PHP))
- .setExplicitNull(flags.get(EXPLICIT_NULL)).build();
+ switch (protocol) {
+ case IsisLevel1:
+ case IsisLevel2:
+ return new IsisPrefixFlagsCaseBuilder().setReadvertisement(flags.get(RE_ADVERTISEMENT))
+ .setNodeSid(flags.get(NODE_SID)).setNoPhp(flags.get(NO_PHP)).setExplicitNull(flags.get(EXPLICIT_NULL)).build();
+ case Ospf:
+ case OspfV3:
+ return new OspfPrefixFlagsCaseBuilder().setExplicitNull(flags.get(EXPLICIT_NULL))
+ .setMappingServer(flags.get(MAPPING_SERVER)).setNoPhp(flags.get(NO_PHP_OSPF)).build();
+ default:
+ return null;
}
- if (protocol.equals(ProtocolId.Ospf)) {
- return new OspfPrefixFlagsCaseBuilder()
- .setExplicitNull(flags.get(EXPLICIT_NULL))
- .setMappingServer(flags.get(MAPPING_SERVER))
- .setNoPhp(flags.get(NO_PHP_OSPF)).build();
- }
- return null;
}
public static void serializeSrPrefix(final SrPrefix srPrefix, final ByteBuf aggregator) {
serializePrefixAttributes(srPrefix.getFlags(), srPrefix.getAlgorithm(), srPrefix.getSidLabelIndex(), aggregator);
}
- public static void serializePrefixAttributes(final Flags flags, final Algorithm algorithm, final SidLabelIndex sidLabelIndex, final ByteBuf buffer) {
+ static void serializePrefixAttributes(final Flags flags, final Algorithm algorithm, final SidLabelIndex sidLabelIndex, final ByteBuf buffer) {
final BitArray bitFlags = serializePrefixFlags(flags, sidLabelIndex);
bitFlags.toByteBuf(buffer);
buffer.writeByte(algorithm.getIntValue());
}
container peer-node-sid {
description "The SID representing the peer of the BGP session.";
- reference "https://tools.ietf.org/html/draft-ietf-idr-bgpls-segment-routing-epe-01#section-4.3";
+ reference "https://tools.ietf.org/html/draft-ietf-idr-bgpls-segment-routing-epe-05#section-4.3";
uses bgp-sr:adj-sid-tlv;
}
container peer-adj-sid {
description "The SID representing the peer of the BGP session.";
- reference "https://tools.ietf.org/html/draft-ietf-idr-bgpls-segment-routing-epe-01#section-4.3";
+ reference "https://tools.ietf.org/html/draft-ietf-idr-bgpls-segment-routing-epe-05#section-4.3";
uses bgp-sr:adj-sid-tlv;
}
list peer-set-sids {
description "The SID representing the group the peer is part of.";
- reference "https://tools.ietf.org/html/draft-ietf-idr-bgpls-segment-routing-epe-01#section-4.3";
+ reference "https://tools.ietf.org/html/draft-ietf-idr-bgpls-segment-routing-epe-05#section-4.3";
uses bgp-sr:adj-sid-tlv;
}
}
import java.util.List;
import org.junit.Test;
import org.opendaylight.protocol.bgp.linkstate.attribute.sr.BindingSidLabelParser;
+import org.opendaylight.protocol.bgp.linkstate.attribute.sr.Ipv6SrPrefixAttributesParser;
import org.opendaylight.protocol.bgp.linkstate.attribute.sr.RangeTlvParser;
import org.opendaylight.protocol.bgp.linkstate.attribute.sr.SidLabelIndexParser;
import org.opendaylight.protocol.bgp.linkstate.attribute.sr.SrLinkAttributesParser;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.node.state.SrAlgorithmBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.node.state.SrCapabilities;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.node.state.SrCapabilitiesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.Ipv6SrPrefix;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.Ipv6SrPrefixBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.SrPrefix;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.SrPrefixBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.SrRange;
assertArrayEquals(bytesOspf, ByteArray.readAllBytes(serializedPrefixOspf));
}
+ // https://tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-02#section-2.3.2
+ @Test
+ public void testIpv6SrPrefix() {
+ final byte[] bytes = { 0, 0, 0};
+ final Ipv6SrPrefix prefix = new Ipv6SrPrefixBuilder().setAlgorithm(Algorithm.ShortestPathFirst).build();
+ assertEquals(prefix, Ipv6SrPrefixAttributesParser.parseSrIpv6Prefix(Unpooled.wrappedBuffer(bytes)));
+ final ByteBuf serializedPrefix = Unpooled.buffer();
+ Ipv6SrPrefixAttributesParser.serializeIpv6SrPrefix(prefix, serializedPrefix);
+ assertArrayEquals(bytes, ByteArray.readAllBytes(serializedPrefix));
+ }
+
// tools.ietf.org/html/draft-gredler-idr-bgp-ls-segment-routing-ext-00#section-2.3.2
@Test
public void testRangeTlv() {
}
}
+ @Test(expected=UnsupportedOperationException.class)
+ public void testIpv6SrPrefixAttributesPrivateConstructor() throws Throwable {
+ final Constructor<Ipv6SrPrefixAttributesParser> c = Ipv6SrPrefixAttributesParser.class.getDeclaredConstructor();
+ c.setAccessible(true);
+ try {
+ c.newInstance();
+ } catch (final InvocationTargetException e) {
+ throw e.getCause();
+ }
+ }
+
@Test(expected=UnsupportedOperationException.class)
public void testBindingParserPrivateConstructor() throws Throwable {
final Constructor<BindingSidLabelParser> c = BindingSidLabelParser.class.getDeclaredConstructor();