<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<groupId>${project.groupId}</groupId>
<artifactId>concepts</artifactId>
</dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jdt</groupId>
+ <artifactId>org.eclipse.jdt.annotation</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-binding-api</artifactId>
</dependency>
<dependency>
- <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
- <artifactId>rfc6991-ietf-inet-types</artifactId>
+ <groupId>org.opendaylight.mdsal</groupId>
+ <artifactId>yang-binding</artifactId>
</dependency>
<dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
+ <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+ <artifactId>rfc6991-ietf-inet-types</artifactId>
</dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<artifactId>netty-buffer</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>yang-common</artifactId>
- </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-data-api</artifactId>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<groupId>${project.groupId}</groupId>
<artifactId>concepts</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>util</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-common-netty</artifactId>
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.esi.Esi;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.esi.esi.LacpAutoGeneratedCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.esi.esi.LacpAutoGeneratedCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.esi.esi.lacp.auto.generated._case.LacpAutoGenerated;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.esi.esi.lacp.auto.generated._case.LacpAutoGeneratedBuilder;
import org.opendaylight.yangtools.yang.common.netty.ByteBufUtils;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
public ByteBuf serializeBody(final Esi esi, final ByteBuf body) {
checkArgument(esi instanceof LacpAutoGeneratedCase,
"Unknown esi instance. Passed %s. Needed LacpAutoGeneratedCase.", esi);
- final LacpAutoGenerated lacp = ((LacpAutoGeneratedCase) esi).getLacpAutoGenerated();
- body.writeBytes(IetfYangUtil.INSTANCE.macAddressBytes(lacp.getCeLacpMacAddress()));
+ final var lacp = ((LacpAutoGeneratedCase) esi).getLacpAutoGenerated();
+ body.writeBytes(IetfYangUtil.macAddressBytes(lacp.getCeLacpMacAddress()));
ByteBufUtils.writeOrZero(body, lacp.getCeLacpPortKey());
return body.writeByte(0);
}
@Override
public Esi serializeEsi(final ContainerNode esi) {
return new LacpAutoGeneratedCaseBuilder()
- .setLacpAutoGenerated(new LacpAutoGeneratedBuilder()
- .setCeLacpMacAddress(extractLacpMac(esi))
- .setCeLacpPortKey(extractPK(esi))
- .build())
- .build();
+ .setLacpAutoGenerated(new LacpAutoGeneratedBuilder()
+ .setCeLacpMacAddress(extractLacpMac(esi))
+ .setCeLacpPortKey(extractPK(esi))
+ .build())
+ .build();
}
@Override
public Esi parseEsi(final ByteBuf buffer) {
return new LacpAutoGeneratedCaseBuilder()
- .setLacpAutoGenerated(new LacpAutoGeneratedBuilder()
- .setCeLacpMacAddress(IetfYangUtil.INSTANCE.macAddressFor(
- ByteArray.readBytes(buffer, MAC_ADDRESS_LENGTH)))
- .setCeLacpPortKey(ByteBufUtils.readUint16(buffer))
- .build())
- .build();
+ .setLacpAutoGenerated(new LacpAutoGeneratedBuilder()
+ .setCeLacpMacAddress(IetfYangUtil.macAddressFor(ByteArray.readBytes(buffer, MAC_ADDRESS_LENGTH)))
+ .setCeLacpPortKey(ByteBufUtils.readUint16(buffer))
+ .build())
+ .build();
}
}
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.esi.Esi;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.esi.esi.LanAutoGeneratedCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.esi.esi.LanAutoGeneratedCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.esi.esi.lan.auto.generated._case.LanAutoGenerated;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.esi.esi.lan.auto.generated._case.LanAutoGeneratedBuilder;
import org.opendaylight.yangtools.yang.common.netty.ByteBufUtils;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
public ByteBuf serializeBody(final Esi esi, final ByteBuf body) {
checkArgument(esi instanceof LanAutoGeneratedCase,
"Unknown esi instance. Passed %s. Needed LanAutoGeneratedCase.", esi);
- final LanAutoGenerated lan = ((LanAutoGeneratedCase) esi).getLanAutoGenerated();
- body.writeBytes(IetfYangUtil.INSTANCE.macAddressBytes(lan.getRootBridgeMacAddress()));
+ final var lan = ((LanAutoGeneratedCase) esi).getLanAutoGenerated();
+ body.writeBytes(IetfYangUtil.macAddressBytes(lan.getRootBridgeMacAddress()));
ByteBufUtils.writeOrZero(body, lan.getRootBridgePriority());
return body.writeByte(0);
}
@Override
public Esi serializeEsi(final ContainerNode esi) {
return new LanAutoGeneratedCaseBuilder()
- .setLanAutoGenerated(new LanAutoGeneratedBuilder()
- .setRootBridgeMacAddress(extractBrigeMac(esi))
- .setRootBridgePriority(extractBP(esi))
- .build())
- .build();
+ .setLanAutoGenerated(new LanAutoGeneratedBuilder()
+ .setRootBridgeMacAddress(extractBrigeMac(esi))
+ .setRootBridgePriority(extractBP(esi))
+ .build())
+ .build();
}
@Override
public Esi parseEsi(final ByteBuf buffer) {
return new LanAutoGeneratedCaseBuilder()
- .setLanAutoGenerated(new LanAutoGeneratedBuilder()
- .setRootBridgeMacAddress(IetfYangUtil.INSTANCE.macAddressFor(
- ByteArray.readBytes(buffer, MAC_ADDRESS_LENGTH)))
- .setRootBridgePriority(ByteBufUtils.readUint16(buffer))
- .build())
- .build();
+ .setLanAutoGenerated(new LanAutoGeneratedBuilder()
+ .setRootBridgeMacAddress(IetfYangUtil.macAddressFor(ByteArray.readBytes(buffer, MAC_ADDRESS_LENGTH)))
+ .setRootBridgePriority(ByteBufUtils.readUint16(buffer))
+ .build())
+ .build();
}
}
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.esi.Esi;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.esi.esi.MacAutoGeneratedCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.esi.esi.MacAutoGeneratedCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.esi.esi.mac.auto.generated._case.MacAutoGenerated;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.esi.esi.mac.auto.generated._case.MacAutoGeneratedBuilder;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
public ByteBuf serializeBody(final Esi esi, final ByteBuf body) {
checkArgument(esi instanceof MacAutoGeneratedCase,
"Unknown esi instance. Passed %s. Needed MacAutoGeneratedCase.", esi.getClass());
- final MacAutoGenerated macAuto = ((MacAutoGeneratedCase) esi).getMacAutoGenerated();
- body.writeBytes(IetfYangUtil.INSTANCE.macAddressBytes(macAuto.getSystemMacAddress()));
+ final var macAuto = ((MacAutoGeneratedCase) esi).getMacAutoGenerated();
+ body.writeBytes(IetfYangUtil.macAddressBytes(macAuto.getSystemMacAddress()));
RFC8294ByteBufUtils.writeUint24(body, macAuto.getLocalDiscriminator());
return body;
}
@Override
public Esi serializeEsi(final ContainerNode esi) {
return new MacAutoGeneratedCaseBuilder()
- .setMacAutoGenerated(new MacAutoGeneratedBuilder()
- .setSystemMacAddress(extractSystmeMac(esi))
- .setLocalDiscriminator(extractUint24LD(esi))
- .build())
- .build();
+ .setMacAutoGenerated(new MacAutoGeneratedBuilder()
+ .setSystemMacAddress(extractSystmeMac(esi))
+ .setLocalDiscriminator(extractUint24LD(esi))
+ .build())
+ .build();
}
@Override
public Esi parseEsi(final ByteBuf buffer) {
return new MacAutoGeneratedCaseBuilder()
- .setMacAutoGenerated(new MacAutoGeneratedBuilder()
- .setSystemMacAddress(IetfYangUtil.INSTANCE.macAddressFor(
- ByteArray.readBytes(buffer, MAC_ADDRESS_LENGTH)))
- .setLocalDiscriminator(RFC8294ByteBufUtils.readUint24(buffer))
- .build())
- .build();
+ .setMacAutoGenerated(new MacAutoGeneratedBuilder()
+ .setSystemMacAddress(IetfYangUtil.macAddressFor(ByteArray.readBytes(buffer, MAC_ADDRESS_LENGTH)))
+ .setLocalDiscriminator(RFC8294ByteBufUtils.readUint24(buffer))
+ .build())
+ .build();
}
}
import io.netty.buffer.ByteBuf;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.IetfYangUtil;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.es._import.route.extended.community.EsImportRouteExtendedCommunity;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.es._import.route.extended.community.EsImportRouteExtendedCommunityBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.evpn.routes.evpn.routes.evpn.route.attributes.extended.communities.extended.community.EsImportRouteExtendedCommunityCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.evpn.routes.evpn.routes.evpn.route.attributes.extended.communities.extended.community.EsImportRouteExtendedCommunityCaseBuilder;
@Override
public ExtendedCommunity parseExtendedCommunity(final ByteBuf buffer) {
- final MacAddress mac = IetfYangUtil.INSTANCE.macAddressFor(ByteArray.readBytes(buffer, MAC_ADDRESS_LENGTH));
-
- return new EsImportRouteExtendedCommunityCaseBuilder().setEsImportRouteExtendedCommunity(
- new EsImportRouteExtendedCommunityBuilder().setEsImport(mac).build()).build();
+ return new EsImportRouteExtendedCommunityCaseBuilder()
+ .setEsImportRouteExtendedCommunity(new EsImportRouteExtendedCommunityBuilder()
+ .setEsImport(IetfYangUtil.macAddressFor(ByteArray.readBytes(buffer, MAC_ADDRESS_LENGTH)))
+ .build())
+ .build();
}
@Override
Preconditions.checkArgument(extendedCommunity instanceof EsImportRouteExtendedCommunityCase,
"The extended community %s is not EsImportRouteExtendedCommunityCaseCase type.",
extendedCommunity);
- final EsImportRouteExtendedCommunity extCom = ((EsImportRouteExtendedCommunityCase) extendedCommunity)
- .getEsImportRouteExtendedCommunity();
- byteAggregator.writeBytes(IetfYangUtil.INSTANCE.macAddressBytes(extCom.getEsImport()));
+ final var extCom = ((EsImportRouteExtendedCommunityCase) extendedCommunity).getEsImportRouteExtendedCommunity();
+ byteAggregator.writeBytes(IetfYangUtil.macAddressBytes(extCom.getEsImport()));
}
@Override
final Esi esi = SimpleEsiTypeRegistry.getInstance().parseEsi(buffer.readSlice(ESI_SIZE));
final EthernetTagId eti = new EthernetTagIdBuilder().setVlanId(ByteBufUtils.readUint32(buffer)).build();
buffer.skipBytes(1);
- final MacAddress mac = IetfYangUtil.INSTANCE.macAddressFor(ByteArray.readBytes(buffer, MAC_ADDRESS_LENGTH));
+ final MacAddress mac = IetfYangUtil.macAddressFor(ByteArray.readBytes(buffer, MAC_ADDRESS_LENGTH));
final IpAddressNoZone ip = parseIp(buffer);
final MplsLabel label1 = mplsLabelForByteBuf(buffer);
MplsLabel label2;
final MacAddress mac = evpn.getMacAddress();
body.writeByte(MAC_ADDRESS_LENGTH * BITS_SIZE);
- body.writeBytes(IetfYangUtil.INSTANCE.macAddressBytes(mac));
+ body.writeBytes(IetfYangUtil.macAddressBytes(mac));
final ByteBuf ipAddress = serializeIp(evpn.getIpAddress());
Preconditions.checkArgument(ipAddress.readableBytes() > 0);
body.writeBytes(ipAddress);
<artifactId>bgp-inet</artifactId>
</dependency>
<dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>util</artifactId>
</dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.SubsequentAddressFamily;
import org.opendaylight.yangtools.yang.binding.ChildOf;
import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.Identifiable;
+import org.opendaylight.yangtools.yang.binding.KeyAware;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
T extends AbstractFlowspecIpNlriParser,
C extends Routes & DataObject,
S extends ChildOf<? super C>,
- R extends Route & ChildOf<? super S> & Identifiable<?>> extends AbstractFlowspecRIBSupport<T, C, S, R> {
+ R extends Route & ChildOf<? super S> & KeyAware<?>> extends AbstractFlowspecRIBSupport<T, C, S, R> {
AbstractFlowspecIpRIBSupport(final BindingNormalizedNodeSerializer mappingService, final Class<C> cazeClass,
final QName cazeQName, final Class<S> containerClass, final QName containerQName, final Class<R> listClass,
final QName listQName, final AddressFamily afi, final QName afiQName, final SubsequentAddressFamily safi,
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.SubsequentAddressFamily;
import org.opendaylight.yangtools.yang.binding.ChildOf;
import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.Identifiable;
+import org.opendaylight.yangtools.yang.binding.KeyAware;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
T extends AbstractFlowspecNlriParser,
C extends Routes & DataObject,
S extends ChildOf<? super C>,
- R extends Route & ChildOf<? super S> & Identifiable<?>> extends AbstractRIBSupport<C, S, R> {
+ R extends Route & ChildOf<? super S> & KeyAware<?>> extends AbstractRIBSupport<C, S, R> {
protected final @NonNull T nlriParser;
protected AbstractFlowspecRIBSupport(
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.AddressFamily;
import org.opendaylight.yangtools.yang.binding.ChildOf;
import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.Identifiable;
+import org.opendaylight.yangtools.yang.binding.KeyAware;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
T extends AbstractFlowspecL3vpnNlriParser,
C extends Routes & DataObject,
S extends ChildOf<? super C>,
- R extends Route & ChildOf<? super S> & Identifiable<?>> extends AbstractFlowspecRIBSupport<T, C, S, R> {
+ R extends Route & ChildOf<? super S> & KeyAware<?>> extends AbstractFlowspecRIBSupport<T, C, S, R> {
protected AbstractFlowspecL3vpnRIBSupport(
final BindingNormalizedNodeSerializer mappingService,
final Class<C> cazeClass, final QName cazeQName,
<name>${project.artifactId}</name>
<dependencies>
+ <dependency>
+ <groupId>com.guicedee.services</groupId>
+ <artifactId>javax.inject</artifactId>
+ <optional>true</optional>
+ </dependency>
<dependency>
<groupId>org.kohsuke.metainf-services</groupId>
<artifactId>metainf-services</artifactId>
</dependency>
<dependency>
- <groupId>com.guicedee.services</groupId>
- <artifactId>javax.inject</artifactId>
- <optional>true</optional>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>util</artifactId>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
import static com.google.common.base.Preconditions.checkState;
-import com.google.common.collect.ImmutableCollection;
import com.google.common.collect.ImmutableSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
import org.opendaylight.protocol.bgp.parser.spi.PathIdUtil;
import org.opendaylight.yangtools.yang.binding.ChildOf;
import org.opendaylight.yangtools.yang.binding.ChoiceIn;
import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.Identifiable;
+import org.opendaylight.yangtools.yang.binding.KeyAware;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
abstract class AbstractIPRibSupport<
C extends Routes & DataObject & ChoiceIn<Tables>,
S extends ChildOf<? super C>,
- R extends Route & ChildOf<S> & Identifiable<?>>
+ R extends Route & ChildOf<S> & KeyAware<?>>
extends AbstractRIBSupport<C, S, R> {
private static final Logger LOG = LoggerFactory.getLogger(AbstractIPRibSupport.class);
+
+ private final @NonNull ImmutableSet<Class<? extends BindingObject>> cacheableNlriObjects;
private final NodeIdentifier prefixNid;
private final NodeIdentifier nlriRoutesList;
- private final ImmutableCollection<Class<? extends BindingObject>> cacheableNlriObjects;
AbstractIPRibSupport(
final BindingNormalizedNodeSerializer mappingService,
}
@Override
- public final ImmutableCollection<Class<? extends BindingObject>> cacheableNlriObjects() {
+ public final ImmutableSet<Class<? extends BindingObject>> cacheableNlriObjects() {
return cacheableNlriObjects;
}
<artifactId>javax.inject</artifactId>
<optional>true</optional>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>util</artifactId>
+ </dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.service.component.annotations</artifactId>
<groupId>${project.groupId}</groupId>
<artifactId>concepts</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>util</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-common-netty</artifactId>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-rfc8294-netty</artifactId>
</dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- </dependency>
<dependency>
<groupId>org.kohsuke.metainf-services</groupId>
<artifactId>metainf-services</artifactId>
<groupId>${project.groupId}</groupId>
<artifactId>rsvp-api</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>util</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-common-netty</artifactId>
<groupId>org.opendaylight.mdsal.model</groupId>
<artifactId>yang-ext</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>util</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-common-netty</artifactId>
}
private static byte[] writeOpaqueValue(final HexString opaque) {
- return IetfYangUtil.INSTANCE.hexStringBytes(opaque);
+ return IetfYangUtil.hexStringBytes(opaque);
}
public static Opaque parseOpaque(final ByteBuf buffer) {
private static HexString buildOpaqueValue(final ByteBuf buffer) {
final int length = buffer.readUnsignedShort();
- return IetfYangUtil.INSTANCE.hexStringFor(ByteArray.readBytes(buffer, length));
+ return IetfYangUtil.hexStringFor(ByteArray.readBytes(buffer, length));
}
public static List<OpaqueValue> parseOpaqueList(final ByteBuf byteBuf) {
<ignoredNonTestScopedDependencies>org.opendaylight.yangtools:yang-data-impl</ignoredNonTestScopedDependencies>
<ignoredNonTestScopedDependencies>org.opendaylight.bgpcep:concepts</ignoredNonTestScopedDependencies>
</ignoredNonTestScopedDependencies>
- <ignoredUnusedDeclaredDependencies>
+ <ignoredUnusedDeclaredDependencies combine.children="append">
<ignoredUnusedDeclaredDependency>org.opendaylight.mdsal.model:yang-ext</ignoredUnusedDeclaredDependency>
<ignoredUnusedDeclaredDependency>org.opendaylight.bgpcep:bgp-bmp-api</ignoredUnusedDeclaredDependency>
</ignoredUnusedDeclaredDependencies>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<groupId>${project.groupId}</groupId>
<artifactId>bgp-inet</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>util</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-common-netty</artifactId>
<groupId>${project.groupId}</groupId>
<artifactId>bgp-parser-api</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.eclipse.jdt</groupId>
+ <artifactId>org.eclipse.jdt.annotation</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-binding-api</artifactId>
<groupId>${project.groupId}</groupId>
<artifactId>bgp-parser-api</artifactId>
</dependency>
+ <dependency>
+ <groupId>com.github.spotbugs</groupId>
+ <artifactId>spotbugs-annotations</artifactId>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.checkerframework</groupId>
+ <artifactId>checker-qual</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jdt</groupId>
+ <artifactId>org.eclipse.jdt.annotation</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>yang-binding</artifactId>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-common</artifactId>
</dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
- <dependency>
- <groupId>org.checkerframework</groupId>
- <artifactId>checker-qual</artifactId>
- <scope>provided</scope>
- </dependency>
<dependency>
<groupId>com.guicedee.services</groupId>
<artifactId>javax.inject</artifactId>
if (address.getIpv4Address() != null) {
nhNew = new Ipv4NextHopCaseBuilder()
.setIpv4NextHop(new Ipv4NextHopBuilder()
- .setGlobal(IetfInetUtil.INSTANCE.ipv4AddressNoZoneFor(address.getIpv4Address()))
+ .setGlobal(IetfInetUtil.ipv4AddressNoZoneFor(address.getIpv4Address()))
.build())
.build();
} else {
nhNew = new Ipv6NextHopCaseBuilder()
.setIpv6NextHop(new Ipv6NextHopBuilder()
- .setGlobal(IetfInetUtil.INSTANCE.ipv6AddressNoZoneFor(address.getIpv6Address()))
+ .setGlobal(IetfInetUtil.ipv6AddressNoZoneFor(address.getIpv6Address()))
.build())
.build();
}
<groupId>${project.groupId}</groupId>
<artifactId>bgp-rib-api</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.eclipse.jdt</groupId>
+ <artifactId>org.eclipse.jdt.annotation</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>concepts</artifactId>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>yang-binding</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.eclipse.jdt</groupId>
+ <artifactId>org.eclipse.jdt.annotation</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>concepts</artifactId>
@Override
public void onPeerAdded(final IpAddressNoZone ip, final BGPSessionPreferences prefs) {
prefs.getMd5Password().ifPresent(password -> {
- keys.put(IetfInetUtil.INSTANCE.inetAddressForNoZone(ip), password);
+ keys.put(IetfInetUtil.inetAddressForNoZone(ip), password);
channelConfig.setOption(EpollChannelOption.TCP_MD5SIG, keys);
});
}
@Override
public void onPeerRemoved(final IpAddressNoZone ip) {
- if (keys.remove(IetfInetUtil.INSTANCE.inetAddressForNoZone(ip)) != null) {
+ if (keys.remove(IetfInetUtil.inetAddressForNoZone(ip)) != null) {
channelConfig.setOption(EpollChannelOption.TCP_MD5SIG, keys);
}
}
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<groupId>${project.groupId}</groupId>
<artifactId>concepts</artifactId>
</dependency>
+ <dependency>
+ <groupId>com.github.spotbugs</groupId>
+ <artifactId>spotbugs-annotations</artifactId>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.checkerframework</groupId>
+ <artifactId>checker-qual</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jdt</groupId>
+ <artifactId>org.eclipse.jdt.annotation</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-dom-api</artifactId>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>concepts</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-lang3</artifactId>
- </dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
- <dependency>
- <groupId>org.checkerframework</groupId>
- <artifactId>checker-qual</artifactId>
- <scope>provided</scope>
- </dependency>
+
<!--Netty -->
<dependency>
<groupId>io.netty</groupId>
case DELETE:
case DISAPPEARED:
// FIXME: we can batch deletions into a single batch
- update = withdraw((MapEntryNode) route.getDataBefore().orElseThrow());
+ update = withdraw((MapEntryNode) route.getDataBefore());
LOG.debug("Withdrawing routes {}", update);
break;
case APPEARED:
case SUBTREE_MODIFIED:
case WRITE:
- update = advertise((MapEntryNode) route.getDataAfter().orElseThrow());
+ update = advertise((MapEntryNode) route.getDataAfter());
LOG.debug("Advertising routes {}", update);
break;
default:
final DOMDataTreeWriteTransaction tx = chain.newWriteOnlyTransaction();
LOG.debug("Received data change to ApplicationRib {}", changes);
for (final DataTreeCandidate tc : changes) {
- LOG.debug("Modification Type {}", tc.getRootNode().getModificationType());
+ LOG.debug("Modification Type {}", tc.getRootNode().modificationType());
final YangInstanceIdentifier path = tc.getRootPath();
final PathArgument lastArg = path.getLastPathArgument();
verify(lastArg instanceof NodeIdentifierWithPredicates,
LOG.trace("Skipping received data change for non supported family {}.", tableKey);
continue;
}
- for (final DataTreeCandidateNode child : tc.getRootNode().getChildNodes()) {
- final PathArgument childIdentifier = child.getIdentifier();
+ for (final DataTreeCandidateNode child : tc.getRootNode().childNodes()) {
+ final PathArgument childIdentifier = child.name();
final YangInstanceIdentifier tableId = adjRibsInId.node(tableKey).node(childIdentifier);
- switch (child.getModificationType()) {
+ switch (child.modificationType()) {
case DELETE:
case DISAPPEARED:
LOG.trace("App peer -> AdjRibsIn path delete: {}", childIdentifier);
private static void processWrite(final DataTreeCandidateNode child, final YangInstanceIdentifier tableId,
final DOMDataTreeWriteTransaction tx) {
- child.getDataAfter().ifPresent(dataAfter -> {
+ final var dataAfter = child.dataAfter();
+ if (dataAfter != null) {
LOG.trace("App peer -> AdjRibsIn path : {}", tableId);
LOG.trace("App peer -> AdjRibsIn data : {}", dataAfter);
tx.put(LogicalDatastoreType.OPERATIONAL, tableId, dataAfter);
- });
+ }
}
private synchronized void processRoutesTable(final DataTreeCandidateNode node,
final YangInstanceIdentifier identifier, final DOMDataTreeWriteTransaction tx,
final YangInstanceIdentifier routeTableIdentifier) {
- for (final DataTreeCandidateNode child : node.getChildNodes()) {
- final YangInstanceIdentifier childIdentifier = identifier.node(child.getIdentifier());
- switch (child.getModificationType()) {
+ for (var child : node.childNodes()) {
+ final YangInstanceIdentifier childIdentifier = identifier.node(child.name());
+ switch (child.modificationType()) {
case DELETE:
LOG.trace("App peer -> AdjRibsIn path delete: {}", childIdentifier);
tx.delete(LogicalDatastoreType.OPERATIONAL, childIdentifier);
private static void processRouteWrite(final DataTreeCandidateNode child,
final YangInstanceIdentifier childIdentifier, final DOMDataTreeWriteTransaction tx) {
- child.getDataAfter().ifPresent(dataAfter -> {
+ final var dataAfter = child.dataAfter();
+ if (dataAfter != null) {
LOG.trace("App peer -> AdjRibsIn path : {}", childIdentifier);
LOG.trace("App peer -> AdjRibsIn data : {}", dataAfter);
tx.put(LogicalDatastoreType.OPERATIONAL, childIdentifier, dataAfter);
- });
+ }
}
@Override
import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingDataObjectCodecTreeNode;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeCachingCodec;
+import org.opendaylight.mdsal.binding.dom.codec.api.CommonDataObjectCodecTreeNode;
import org.opendaylight.protocol.bgp.rib.impl.spi.Codecs;
import org.opendaylight.protocol.bgp.rib.spi.RIBSupport;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.ClusterId;
@SuppressWarnings("unchecked")
public void onCodecTreeUpdated(final BindingCodecTree tree) {
- @SuppressWarnings("rawtypes")
- final BindingDataObjectCodecTreeNode tableCodecContext = tree.getSubtreeCodec(TABLE_BASE_II);
+ final CommonDataObjectCodecTreeNode<Tables> codecContext = tree.getSubtreeCodec(TABLE_BASE_II);
+ if (!(codecContext instanceof BindingDataObjectCodecTreeNode tableCodecContext)) {
+ throw new IllegalStateException("Unexpected table codec " + codecContext);
+ }
+
final BindingDataObjectCodecTreeNode<? extends Route> routeListCodec = tableCodecContext
- .streamChild(Routes.class)
- .streamChild(ribSupport.routesCaseClass())
- .streamChild(ribSupport.routesContainerClass())
- .streamChild(ribSupport.routesListClass());
+ .getStreamChild(Routes.class)
+ .getStreamChild(ribSupport.routesCaseClass())
+ .getStreamChild(ribSupport.routesContainerClass())
+ .getStreamDataObject(ribSupport.routesListClass());
- attributesCodec = routeListCodec.streamChild(Attributes.class)
+ attributesCodec = routeListCodec.getStreamDataObject(Attributes.class)
.createCachingCodec(cacheableAttributes);
- final var attrCodec = tree.streamChild(Update.class)
- .streamChild(Attributes.class);
- reachNlriCodec = attrCodec.streamChild(AttributesReach.class)
- .streamChild(MpReachNlri.class)
+ final var attrCodec = tree.getStreamChild(Update.class).getStreamChild(Attributes.class);
+ reachNlriCodec = attrCodec.getStreamChild(AttributesReach.class)
+ .getStreamDataObject(MpReachNlri.class)
.createCachingCodec(ribSupport.cacheableNlriObjects());
- unreachNlriCodec = attrCodec.streamChild(AttributesUnreach.class)
- .streamChild(MpUnreachNlri.class)
+ unreachNlriCodec = attrCodec.getStreamChild(AttributesUnreach.class)
+ .getStreamDataObject(MpUnreachNlri.class)
.createCachingCodec(ribSupport.cacheableNlriObjects());
}
import static com.google.common.base.Verify.verify;
import static com.google.common.base.Verify.verifyNotNull;
import static java.util.Objects.requireNonNull;
-import static org.opendaylight.protocol.bgp.rib.spi.RIBNodeIdentifiers.ADJRIBIN_ATTRIBUTES_AID;
import static org.opendaylight.protocol.bgp.rib.spi.RIBNodeIdentifiers.ADJRIBIN_NID;
import static org.opendaylight.protocol.bgp.rib.spi.RIBNodeIdentifiers.ATTRIBUTES_NID;
import static org.opendaylight.protocol.bgp.rib.spi.RIBNodeIdentifiers.EFFRIBIN_NID;
import java.util.concurrent.atomic.LongAdder;
import org.checkerframework.checker.lock.qual.GuardedBy;
import org.checkerframework.checker.lock.qual.Holding;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.mdsal.common.api.CommitInfo;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.mdsal.dom.api.ClusteredDOMDataTreeChangeListener;
private void deleteTable(final DOMDataTreeWriteTransaction tx, final RIBSupportContext ribContext,
final YangInstanceIdentifier effectiveTablePath, final DataTreeCandidateNode table) {
LOG.debug("Delete Effective Table {}", effectiveTablePath);
- onDeleteTable(ribContext.getRibSupport(), effectiveTablePath, table.getDataBefore());
+ onDeleteTable(ribContext.getRibSupport(), effectiveTablePath, table.dataBefore());
tx.delete(LogicalDatastoreType.OPERATIONAL, effectiveTablePath);
}
final YangInstanceIdentifier effectiveTablePath, final DataTreeCandidateNode table) {
LOG.debug("Modify Effective Table {}", effectiveTablePath);
- final boolean wasLongLivedStale = isLongLivedStaleTable(table.getDataBefore());
- final boolean longLivedStale = isLongLivedStaleTable(table.getDataAfter());
+ final boolean wasLongLivedStale = isLongLivedStaleTable(table.findDataBefore());
+ final boolean longLivedStale = isLongLivedStaleTable(table.findDataAfter());
if (wasLongLivedStale != longLivedStale) {
LOG.debug("LLGR_STALE flag flipped {}, overwriting table {}", longLivedStale ? "ON" : "OFF",
effectiveTablePath);
return;
}
- table.getModifiedChild(ATTRIBUTES_NID).ifPresent(modifiedAttrs -> {
+ final var modifiedAttrs = table.modifiedChild(ATTRIBUTES_NID);
+ if (modifiedAttrs != null) {
final YangInstanceIdentifier effAttrsPath = effectiveTablePath.node(ATTRIBUTES_NID);
- final Optional<NormalizedNode> optAttrsAfter = modifiedAttrs.getDataAfter();
- if (optAttrsAfter.isPresent()) {
+ final var attrsAfter = modifiedAttrs.dataAfter();
+ if (attrsAfter != null) {
tx.put(LogicalDatastoreType.OPERATIONAL, effAttrsPath,
- effectiveAttributes(extractContainer(optAttrsAfter.orElseThrow())));
+ effectiveAttributes(extractContainer(attrsAfter)));
} else {
tx.delete(LogicalDatastoreType.OPERATIONAL, effAttrsPath);
}
- });
+ }
- table.getModifiedChild(ROUTES_NID).ifPresent(modifiedRoutes -> {
+ final var modifiedRoutes = table.modifiedChild(ROUTES_NID);
+ if (modifiedRoutes != null) {
final RIBSupport<?, ?> ribSupport = ribContext.getRibSupport();
- switch (modifiedRoutes.getModificationType()) {
+ switch (modifiedRoutes.modificationType()) {
case APPEARED:
case WRITE:
deleteRoutesBefore(tx, ribSupport, effectiveTablePath, modifiedRoutes);
// XXX: YANG Tools seems to have an issue stacking DELETE with child WRITE
tx.put(LogicalDatastoreType.OPERATIONAL, effectiveTablePath.node(ROUTES_NID), EMPTY_ROUTES);
- writeRoutesAfter(tx, ribSupport, effectiveTablePath, modifiedRoutes.getDataAfter(), longLivedStale);
+ writeRoutesAfter(tx, ribSupport, effectiveTablePath, modifiedRoutes.findDataAfter(),
+ longLivedStale);
break;
case DELETE:
case DISAPPEARED:
LOG.warn("Ignoring modified routes {}", modifiedRoutes);
break;
}
- });
+ }
}
private void writeTable(final DOMDataTreeWriteTransaction tx, final RIBSupportContext ribContext,
final YangInstanceIdentifier effectiveTablePath, final DataTreeCandidateNode table) {
LOG.debug("Write Effective Table {}", effectiveTablePath);
- onDeleteTable(ribContext.getRibSupport(), effectiveTablePath, table.getDataBefore());
+ onDeleteTable(ribContext.getRibSupport(), effectiveTablePath, table.dataBefore());
- final Optional<NormalizedNode> maybeTableAfter = table.getDataAfter();
- if (maybeTableAfter.isPresent()) {
- final NormalizedNode node = maybeTableAfter.orElseThrow();
+ final var node = table.dataAfter();
+ if (node != null) {
verify(node instanceof MapEntryNode, "Expected MapEntryNode, got %s", node);
final MapEntryNode tableAfter = (MapEntryNode) node;
ribContext.createEmptyTableStructure(tx, effectiveTablePath);
// Performs house-keeping when the contents of a table is deleted
private void onDeleteTable(final RIBSupport<?, ?> ribSupport, final YangInstanceIdentifier effectiveTablePath,
- final Optional<NormalizedNode> tableBefore) {
+ final @Nullable NormalizedNode tableBefore) {
// Routes are special in that we need to process the to keep our counters accurate
- final Optional<NormalizedNode> maybeRoutesBefore = findRoutesMap(ribSupport,
- NormalizedNodes.findNode(tableBefore, ROUTES_NID));
+ final var maybeRoutesBefore = findRoutesMap(ribSupport, NormalizedNodes.findNode(tableBefore, ROUTES_NID));
if (maybeRoutesBefore.isPresent()) {
onRoutesDeleted(ribSupport, effectiveTablePath, extractMap(maybeRoutesBefore).body());
}
private void deleteRoutesBefore(final DOMDataTreeWriteTransaction tx, final RIBSupport<?, ?> ribSupport,
final YangInstanceIdentifier effectiveTablePath, final DataTreeCandidateNode modifiedRoutes) {
- final Optional<NormalizedNode> maybeRoutesBefore = NormalizedNodes.findNode(
- modifiedRoutes.getDataBefore(), ribSupport.relativeRoutesPath());
+ final Optional<NormalizedNode> maybeRoutesBefore =
+ NormalizedNodes.findNode(modifiedRoutes.dataBefore(), ribSupport.relativeRoutesPath());
if (maybeRoutesBefore.isPresent()) {
onRoutesDeleted(ribSupport, effectiveTablePath, extractMap(maybeRoutesBefore).body());
}
if (maybeRoutesAfter.isPresent()) {
final YangInstanceIdentifier routesPath = routeMapPath(ribSupport, effectiveTablePath);
for (MapEntryNode routeAfter : extractMap(maybeRoutesAfter).body()) {
- writeRoute(tx, ribSupport, routesPath.node(routeAfter.getIdentifier()), Optional.empty(), routeAfter,
+ writeRoute(tx, ribSupport, routesPath.node(routeAfter.getIdentifier()), null, routeAfter,
longLivedStale);
}
}
switch (route.getModificationType()) {
case DELETE:
case DISAPPEARED:
- deleteRoute(tx, ribSupport, routePath, route.getDataBefore().orElse(null));
+ deleteRoute(tx, ribSupport, routePath, route.dataBefore());
break;
case UNMODIFIED:
// No-op
case APPEARED:
case SUBTREE_MODIFIED:
case WRITE:
- writeRoute(tx, ribSupport, routePath, route.getDataBefore(), route.getDataAfter().orElseThrow(),
- longLivedStale);
+ writeRoute(tx, ribSupport, routePath, route.dataBefore(), route.getDataAfter(), longLivedStale);
break;
default:
LOG.warn("Ignoring unhandled route {}", route);
}
private void writeRoute(final DOMDataTreeWriteTransaction tx, final RIBSupport<?, ?> ribSupport,
- final YangInstanceIdentifier routePath, final Optional<NormalizedNode> routeBefore,
- final NormalizedNode routeAfter, final boolean longLivedStale) {
+ final YangInstanceIdentifier routePath, final @Nullable NormalizedNode routeBefore,
+ final @NonNull NormalizedNode routeAfter, final boolean longLivedStale) {
final TablesKey tablesKey = ribSupport.getTablesKey();
CountersUtil.increment(prefixesReceived.get(tablesKey), tablesKey);
// Lookup per-table attributes from RIBSupport
// LLGR procedures are in effect. If the route is tagged with NO_LLGR, it needs to be removed.
final List<Communities> effCommunities = routeAttrs.getCommunities();
if (effCommunities != null && effCommunities.contains(CommunityUtil.NO_LLGR)) {
- deleteRoute(tx, ribSupport, routePath, routeBefore.orElse(null));
+ deleteRoute(tx, ribSupport, routePath, routeBefore);
return;
}
optEffAtt = Optional.of(wrapLongLivedStale(routeAttrs));
verifyNotNull(tableTypeRegistry.getAfiSafiType(ribSupport.getTablesKey())));
}
if (optEffAtt.isEmpty()) {
- deleteRoute(tx, ribSupport, routePath, routeBefore.orElse(null));
+ deleteRoute(tx, ribSupport, routePath, routeBefore);
return;
}
handleRouteTarget(ModificationType.WRITE, ribSupport, routePath, routeAfter);
}
private static boolean isLongLivedStale(final ContainerNode attributes) {
- return NormalizedNodes.findNode(attributes, ADJRIBIN_ATTRIBUTES_AID, LLGR_STALE_NID).isPresent();
+ return NormalizedNodes.findNode(attributes, LLGR_STALE_NID).isPresent();
}
private static boolean isLongLivedStaleTable(final Optional<NormalizedNode> optTable) {
this.ribIId = requireNonNull(ribIId);
this.ribSupport = requireNonNull(ribSupport);
- locRibTableIID = ribIId.node(LOCRIB_NID).node(TABLES_NID).node(ribSupport.emptyTable().getIdentifier())
- .toOptimized();
+ locRibTableIID = ribIId.node(LOCRIB_NID).node(TABLES_NID).node(ribSupport.emptyTable().name()).toOptimized();
+
this.ourAs = ourAs.toJava();
this.dataBroker = requireNonNull(dataBroker);
this.peerTracker = peerTracker;
}
}
- @SuppressWarnings("unchecked")
private Map<RouteUpdateKey, RouteEntry<C, S>> update(final DOMDataTreeWriteOperations tx,
final Collection<DataTreeCandidate> changes) {
final Map<RouteUpdateKey, RouteEntry<C, S>> ret = new HashMap<>();
final DataTreeCandidateNode table = tc.getRootNode();
final RouterId peerUuid = RouterId.forPeerId(IdentifierUtils.peerKeyToPeerId(tc.getRootPath()));
- /*
- Initialize Peer with routes under loc rib
- */
- if (!routeEntries.isEmpty() && table.getDataBefore().isEmpty()) {
+ // Initialize Peer with routes under loc rib
+ if (!routeEntries.isEmpty() && table.dataBefore() == null) {
final org.opendaylight.protocol.bgp.rib.spi.Peer toPeer
= peerTracker.getPeer(peerUuid.getPeerId());
if (toPeer != null && toPeer.supportsTable(entryDep.getLocalTablesKey())) {
toPeer.initializeRibOut(entryDep, routesToStore);
}
}
- /*
- Process new routes from Peer
- */
+ // Process new routes from Peer
updateNodes(table, peerUuid, tx, ret);
}
return ret;
private void updateNodes(final DataTreeCandidateNode table, final RouterId peerUuid,
final DOMDataTreeWriteOperations tx, final Map<RouteUpdateKey, RouteEntry<C, S>> routes) {
- table.getModifiedChild(ATTRIBUTES_NID).flatMap(DataTreeCandidateNode::getDataAfter).ifPresent(newAttValue -> {
- LOG.trace("Uptodate found for {}", newAttValue);
- tx.put(LogicalDatastoreType.OPERATIONAL, locRibTableIID.node(ATTRIBUTES_NID), newAttValue);
- });
-
- table.getModifiedChild(ROUTES_NID).ifPresent(modifiedRoutes -> {
+ final var modifiedAttrs = table.modifiedChild(ATTRIBUTES_NID);
+ if (modifiedAttrs != null) {
+ final var newAttValue = modifiedAttrs.dataAfter();
+ if (newAttValue != null) {
+ LOG.trace("Uptodate found for {}", newAttValue);
+ tx.put(LogicalDatastoreType.OPERATIONAL, locRibTableIID.node(ATTRIBUTES_NID), newAttValue);
+ }
+ }
+ final var modifiedRoutes = table.modifiedChild(ROUTES_NID);
+ if (modifiedRoutes != null) {
updateRoutesEntries(ribSupport.changedRoutes(modifiedRoutes), peerUuid, routes);
- });
+ }
}
private void updateRoutesEntries(final Collection<DataTreeCandidateNode> collection,
entry = createEntry(routeKey);
}
- final NormalizedNode routeAfter = route.getDataAfter().orElseThrow();
+ final NormalizedNode routeAfter = route.getDataAfter();
verify(routeAfter instanceof MapEntryNode, "Unexpected route %s", routeAfter);
entry.addRoute(routerId, pathId, (MapEntryNode) routeAfter);
totalPathsCounter.increment();
public synchronized void addPeer(final IpAddressNoZone oldIp, final BGPSessionListener peer,
final BGPSessionPreferences preferences) {
IpAddressNoZone fullIp = getFullIp(oldIp);
- Preconditions.checkArgument(!this.peers.containsKey(fullIp),
+ Preconditions.checkArgument(!peers.containsKey(fullIp),
"Peer for %s already present", fullIp);
- this.peers.put(fullIp, requireNonNull(peer));
+ peers.put(fullIp, requireNonNull(peer));
requireNonNull(preferences.getMyAs());
requireNonNull(preferences.getParams());
requireNonNull(preferences.getBgpId());
- this.peerPreferences.put(fullIp, preferences);
- for (final PeerRegistryListener peerRegistryListener : this.listeners) {
+ peerPreferences.put(fullIp, preferences);
+ for (final PeerRegistryListener peerRegistryListener : listeners) {
peerRegistryListener.onPeerAdded(fullIp, preferences);
}
}
@Override
public synchronized void removePeer(final IpAddressNoZone oldIp) {
IpAddressNoZone fullIp = getFullIp(oldIp);
- this.peers.remove(fullIp);
- for (final PeerRegistryListener peerRegistryListener : this.listeners) {
+ peers.remove(fullIp);
+ for (final PeerRegistryListener peerRegistryListener : listeners) {
peerRegistryListener.onPeerRemoved(fullIp);
}
}
@Override
public synchronized void removePeerSession(final IpAddressNoZone oldIp) {
IpAddressNoZone fullIp = getFullIp(oldIp);
- this.sessionIds.remove(fullIp);
- for (final PeerRegistrySessionListener peerRegistrySessionListener : this.sessionListeners) {
+ sessionIds.remove(fullIp);
+ for (final PeerRegistrySessionListener peerRegistrySessionListener : sessionListeners) {
peerRegistrySessionListener.onSessionRemoved(fullIp);
}
}
@Override
public boolean isPeerConfigured(final IpAddressNoZone oldIp) {
IpAddressNoZone fullIp = getFullIp(oldIp);
- return this.peers.containsKey(fullIp);
+ return peers.containsKey(fullIp);
}
private void checkPeerConfigured(final IpAddressNoZone ip) {
Preconditions.checkState(isPeerConfigured(ip),
"BGP peer with ip: %s not configured, configured peers are: %s",
- ip, this.peers.keySet());
+ ip, peers.keySet());
}
@Override
checkPeerConfigured(ip);
final BGPSessionId currentConnection = new BGPSessionId(sourceId, remoteId, remoteAsNumber);
- final BGPSessionListener p = this.peers.get(ip);
+ final BGPSessionListener p = peers.get(ip);
- final BGPSessionId previousConnection = this.sessionIds.get(ip);
+ final BGPSessionId previousConnection = sessionIds.get(ip);
if (previousConnection != null) {
} else if (currentConnection.isHigherDirection(previousConnection)
|| currentConnection.hasHigherAsNumber(previousConnection)) {
LOG.warn("BGP session with {} {} released. Replaced by opposite session", ip, previousConnection);
- this.peers.get(ip).releaseConnection();
- return this.peers.get(ip);
+ peers.get(ip).releaseConnection();
+ return peers.get(ip);
// Session reestablished with same source bgp id, dropping current as duplicate
} else {
LOG.warn("BGP session with {} initiated from {} to {} has to be dropped. Same session already present",
validateAs(remoteAsNumber, openObj, prefs);
// Map session id to peer IP address
- this.sessionIds.put(ip, currentConnection);
- for (final PeerRegistrySessionListener peerRegistrySessionListener : this.sessionListeners) {
+ sessionIds.put(ip, currentConnection);
+ for (final PeerRegistrySessionListener peerRegistrySessionListener : sessionListeners) {
peerRegistrySessionListener.onSessionCreated(ip);
}
return p;
public BGPSessionPreferences getPeerPreferences(final IpAddressNoZone ip) {
requireNonNull(ip);
checkPeerConfigured(ip);
- return this.peerPreferences.get(ip);
+ return peerPreferences.get(ip);
}
/**
Preconditions.checkArgument(inetAddress instanceof Inet4Address
|| inetAddress instanceof Inet6Address, "Expecting %s or %s but was %s",
Inet4Address.class, Inet6Address.class, inetAddress.getClass());
- return IetfInetUtil.INSTANCE.ipAddressNoZoneFor(inetAddress);
+ return IetfInetUtil.ipAddressNoZoneFor(inetAddress);
}
@Deactivate
@PreDestroy
@Override
public synchronized void close() {
- this.peers.clear();
- this.sessionIds.clear();
+ peers.clear();
+ sessionIds.clear();
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
- .add("peers", this.peers.keySet())
+ .add("peers", peers.keySet())
.toString();
}
final BGPSessionId bGPSessionId = (BGPSessionId) obj;
- if (!this.from.equals(bGPSessionId.from) && !this.from.equals(bGPSessionId.to)) {
+ if (!from.equals(bGPSessionId.from) && !from.equals(bGPSessionId.to)) {
return false;
}
- if (!this.to.equals(bGPSessionId.to) && !this.to.equals(bGPSessionId.from)) {
+ if (!to.equals(bGPSessionId.to) && !to.equals(bGPSessionId.from)) {
return false;
}
@Override
public int hashCode() {
final int prime = 31;
- int result = this.from.hashCode() + this.to.hashCode();
+ int result = from.hashCode() + to.hashCode();
result = prime * result;
return result;
}
* Check if this connection is equal to other and if it contains higher source bgp id.
*/
boolean isHigherDirection(final BGPSessionId other) {
- return toLong(this.from) > toLong(other.from);
+ return toLong(from) > toLong(other.from);
}
boolean hasHigherAsNumber(final BGPSessionId other) {
- return this.asNumber.getValue().compareTo(other.asNumber.getValue()) > 0;
+ return asNumber.getValue().compareTo(other.asNumber.getValue()) > 0;
}
private static long toLong(final Ipv4Address from) {
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
- .add("from", this.from)
- .add("to", this.to)
+ .add("from", from)
+ .add("to", to)
.toString();
}
}
@Override
public synchronized Registration registerPeerRegisterListener(final PeerRegistryListener listener) {
- this.listeners.add(listener);
- for (final Entry<IpAddressNoZone, BGPSessionPreferences> entry : this.peerPreferences.entrySet()) {
+ listeners.add(listener);
+ for (final Entry<IpAddressNoZone, BGPSessionPreferences> entry : peerPreferences.entrySet()) {
listener.onPeerAdded(entry.getKey(), entry.getValue());
}
return new AbstractRegistration() {
@Override
protected void removeRegistration() {
- StrictBGPPeerRegistry.this.listeners.remove(listener);
+ listeners.remove(listener);
}
};
}
@Override
public synchronized Registration registerPeerSessionListener(final PeerRegistrySessionListener listener) {
- this.sessionListeners.add(listener);
- for (final IpAddressNoZone ipAddress : this.sessionIds.keySet()) {
+ sessionListeners.add(listener);
+ for (final IpAddressNoZone ipAddress : sessionIds.keySet()) {
listener.onSessionCreated(ipAddress);
}
return new AbstractRegistration() {
@Override
protected void removeRegistration() {
- StrictBGPPeerRegistry.this.sessionListeners.remove(listener);
+ sessionListeners.remove(listener);
}
};
}
@Override
public void updatePeerPreferences(final IpAddressNoZone address, final BGPSessionPreferences preferences) {
- if (this.peerPreferences.containsKey(address)) {
- this.peerPreferences.put(address, preferences);
+ if (peerPreferences.containsKey(address)) {
+ peerPreferences.put(address, preferences);
}
}
}
LOG.info("Starting AppPeer instance {}", neighbor.getNeighborAddress());
currentConfiguration = neighbor;
bgpAppPeerSingletonService = new BgpAppPeerSingletonService(rib, createAppRibId(neighbor),
- IetfInetUtil.INSTANCE.ipv4AddressNoZoneFor(neighbor.getNeighborAddress().getIpv4Address()),
- tableTypeRegistry);
+ IetfInetUtil.ipv4AddressNoZoneFor(neighbor.getNeighborAddress().getIpv4Address()), tableTypeRegistry);
stateProviderRegistration = stateProviderRegistry.register(this);
}
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.function.Function;
-import java.util.stream.Collectors;
import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer;
import org.opendaylight.protocol.bgp.rib.impl.BgpPeerUtil;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.optional.capabilities.CParametersBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1Builder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.LlGracefulRestartCapabilityBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.ll.graceful.restart.capability.Tables;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.ll.graceful.restart.capability.Tables.AfiFlags;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.ll.graceful.restart.capability.TablesBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey;
-import org.opendaylight.yangtools.yang.binding.Identifiable;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
import org.opendaylight.yangtools.yang.common.Uint32;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger LOG = LoggerFactory.getLogger(GracefulRestartUtil.class);
private GracefulRestartUtil() {
-
+ // Hidden on purpose
}
public static CParameters getGracefulCapability(final Map<TablesKey, Boolean> tables,
final TablesKey key = entry.getKey();
return gracefulRestartTable(key.getAfi(), key.getSafi(), entry.getValue());
})
- .collect(Collectors.toMap(Identifiable::key, Function.identity())), restartTime, localRestarting);
+ .collect(BindingMap.toMap()), restartTime, localRestarting);
}
public static CParameters getLlGracefulCapability(final Set<BgpPeerUtil.LlGracefulRestartDTO> llGracefulRestarts) {
.setAfiFlags(new AfiFlags(dto.isForwarding()))
.setLongLivedStaleTime(new Uint24(Uint32.valueOf(dto.getStaleTime())))
.build())
- .collect(Collectors.toMap(Tables::key, Function.identity())))
+ .collect(BindingMap.toMap()))
.build())
.build())
.build();
package org.opendaylight.protocol.bgp.rib.impl.config;
import static com.google.common.base.Preconditions.checkState;
-import static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil.INSTANCE;
import com.google.common.collect.Maps;
import java.util.ArrayList;
if (config != null) {
final String authPassword = config.getAuthPassword();
if (authPassword != null) {
- return KeyMapping.of(INSTANCE.inetAddressFor(neighbor.getNeighborAddress()), authPassword);
+ return KeyMapping.of(IetfInetUtil.inetAddressFor(neighbor.getNeighborAddress()), authPassword);
}
}
return null;
}
final Ipv4Address ipv4 = addr.getIpv4Address();
if (ipv4 != null) {
- return new IpAddressNoZone(INSTANCE.ipv4AddressNoZoneFor(ipv4));
+ return new IpAddressNoZone(IetfInetUtil.ipv4AddressNoZoneFor(ipv4));
}
final Ipv6Address ipv6 = addr.getIpv6Address();
checkState(ipv6 != null, "Unexpected address %s", addr);
- return new IpAddressNoZone(INSTANCE.ipv6AddressNoZoneFor(ipv6));
+ return new IpAddressNoZone(IetfInetUtil.ipv6AddressNoZoneFor(ipv6));
}
static String getNeighborInstanceName(final InstanceIdentifier<?> rootIdentifier) {
} else {
addr = globalConfig.getRouterId();
}
- return new ClusterIdentifier(IetfInetUtil.INSTANCE.ipv4AddressNoZoneFor(addr));
+ return new ClusterIdentifier(IetfInetUtil.ipv4AddressNoZoneFor(addr));
}
static @Nullable ClusterIdentifier getNeighborClusterIdentifier(
final org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.route
.reflector.Config config = routeReflector.getConfig();
if (config != null && config.getRouteReflectorClusterId() != null) {
- return new ClusterIdentifier(IetfInetUtil.INSTANCE.ipv4AddressNoZoneFor(
+ return new ClusterIdentifier(IetfInetUtil.ipv4AddressNoZoneFor(
config.getRouteReflectorClusterId().getIpv4Address()));
}
}
if (!enabled.orElse(Boolean.FALSE)) {
return null;
}
- switch (role) {
- case Ebgp:
- return RevisedErrorHandlingSupportImpl.forExternalPeer();
- case Ibgp:
- case Internal:
- case RrClient:
- return RevisedErrorHandlingSupportImpl.forInternalPeer();
- default:
- throw new IllegalStateException("Unhandled role " + role);
- }
+ return switch (role) {
+ case Ebgp -> RevisedErrorHandlingSupportImpl.forExternalPeer();
+ case Ibgp, Internal, RrClient -> RevisedErrorHandlingSupportImpl.forInternalPeer();
+ default -> throw new IllegalStateException("Unhandled role " + role);
+ };
}
private static Optional<Boolean> getRevisedErrorHandling(final BgpNeighborGroup group) {
afiSafi = getAfiSafiWithDefault(global.getAfiSafis(), true).values();
final Config globalConfig = global.getConfig();
asNumber = globalConfig.getAs();
- routerId = IetfInetUtil.INSTANCE.ipv4AddressNoZoneFor(globalConfig.getRouterId());
+ routerId = IetfInetUtil.ipv4AddressNoZoneFor(globalConfig.getRouterId());
clusterId = getGlobalClusterIdentifier(globalConfig);
final Map<TablesKey, PathSelectionMode> pathSelectionModes = OpenConfigMappingUtil
.toPathSelectionMode(afiSafi, tableTypeRegistry).entrySet()
capas.add(new OptionalCapabilitiesBuilder()
.setCParameters(BgpExtendedMessageUtil.EXTENDED_MESSAGE_CAPABILITY).build());
tlvs.add(new BgpParametersBuilder().setOptionalCapabilities(capas).build());
- final BgpId bgpId = new BgpId(IetfInetUtil.INSTANCE.ipv4AddressFor(socketAddress.getAddress()));
+ final BgpId bgpId = new BgpId(IetfInetUtil.ipv4AddressFor(socketAddress.getAddress()));
return new BGPSessionPreferences(AS_NUMBER, HOLD_TIMER, bgpId, AS_NUMBER, tlvs);
}
final DataTreeCandidate candidate = mock(DataTreeCandidate.class);
final DataTreeCandidateNode rootNode = mock(DataTreeCandidateNode.class);
doReturn(rootNode).when(candidate).getRootNode();
- doReturn(type).when(rootNode).getModificationType();
+ doReturn(type).when(rootNode).modificationType();
doCallRealMethod().when(rootNode).toString();
doReturn(target).when(candidate).getRootPath();
doCallRealMethod().when(candidate).toString();
.withNodeIdentifier(new NodeIdentifier(PREFIX_QNAME)).withValue(p).build());
final DataTreeCandidateNode child = mock(DataTreeCandidateNode.class);
- doReturn(createIdentifier(p)).when(child).getIdentifier();
- doReturn(java.util.Optional.of(b.build())).when(child).getDataAfter();
- doReturn(type).when(child).getModificationType();
+ doReturn(createIdentifier(p)).when(child).name();
+ doReturn(b.build()).when(child).dataAfter();
+ doReturn(type).when(child).modificationType();
children.add(child);
}
- doReturn(children).when(rootNode).getChildNodes();
+ doReturn(children).when(rootNode).childNodes();
col.add(candidate);
return col;
}
private void overrideMockedBehaviour() {
doAnswer(invocation -> {
final var node = invocation.getArgument(2, NormalizedNode.class);
- final var nodeType = node.getIdentifier().getNodeType();
+ final var nodeType = node.name().getNodeType();
if (nodeType.equals(Ipv4Route.QNAME) || nodeType.equals(PREFIX_QNAME)) {
routes.put(invocation.getArgument(1), node);
}
import static org.opendaylight.protocol.bgp.rib.impl.config.BgpPeerTest.createAfiSafi;
import static org.opendaylight.protocol.bgp.rib.impl.config.BgpPeerTest.createNeighborExpected;
import static org.opendaylight.protocol.bgp.rib.impl.config.OpenConfigMappingUtil.HOLDTIMER;
-import static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil.INSTANCE;
import com.google.common.collect.ImmutableMap;
import java.math.BigDecimal;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.protocols.ProtocolKey;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.policy.types.rev151009.BGP;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressNoZone;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
@Test
public void testGetNeighborKey() {
assertArrayEquals(MD5_PASSWORD.getBytes(StandardCharsets.US_ASCII),
- OpenConfigMappingUtil.getNeighborKey(NEIGHBOR).asMap().get(INSTANCE.inetAddressFor(NEIGHBOR_ADDRESS)));
+ OpenConfigMappingUtil.getNeighborKey(NEIGHBOR).asMap().get(IetfInetUtil.inetAddressFor(NEIGHBOR_ADDRESS)));
assertNull(OpenConfigMappingUtil.getNeighborKey(EMPTY_NEIGHBOR));
assertNull(OpenConfigMappingUtil.getNeighborKey(new NeighborBuilder().setNeighborAddress(NEIGHBOR_ADDRESS)
.setConfig(new ConfigBuilder().build()).build()));
<groupId>${project.groupId}</groupId>
<artifactId>util</artifactId>
</dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>bgp-concepts</artifactId>
+ </dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>bgp-parser-api</artifactId>
import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableList;
import java.util.Collection;
-import java.util.Collections;
import java.util.List;
+import java.util.Set;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.bgp.concepts.RouteDistinguisherUtil;
import org.opendaylight.yangtools.yang.binding.ChildOf;
import org.opendaylight.yangtools.yang.binding.ChoiceIn;
import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.Identifiable;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.KeyAware;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.common.Uint32;
public abstract class AbstractRIBSupport<
C extends Routes & DataObject & ChoiceIn<Tables>,
S extends ChildOf<? super C>,
- R extends Route & ChildOf<? super S> & Identifiable<?>>
+ R extends Route & ChildOf<? super S> & KeyAware<?>>
implements RIBSupport<C, S> {
public static final String ROUTE_KEY = "route-key";
private static final Logger LOG = LoggerFactory.getLogger(AbstractRIBSupport.class);
routeKeyQname = QName.create(module, ROUTE_KEY).intern();
routesListIdentifier = NodeIdentifier.create(routeQname);
- emptyTable = (MapEntryNode) this.mappingService
- .toNormalizedNode(TABLES_II, new TablesBuilder().withKey(tk)
- .setAttributes(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib
- .rev180329.rib.tables.AttributesBuilder().build()).build()).getValue();
+ emptyTable = (MapEntryNode) mappingService.toNormalizedDataObject(TABLES_II, new TablesBuilder().withKey(tk)
+ .setAttributes(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329
+ .rib.tables.AttributesBuilder().build()).build()).node();
pathIdNid = NodeIdentifier.create(QName.create(routeQName(), "path-id").intern());
prefixTypeNid = NodeIdentifier.create(QName.create(destContainerQname, "prefix").intern());
rdNid = NodeIdentifier.create(QName.create(destContainerQname, "route-distinguisher").intern());
- routeDefaultYii = YangInstanceIdentifier.create(BGPRIB_NID, RIB_NID, RIB_NID, LOCRIB_NID,
+ routeDefaultYii = YangInstanceIdentifier.of(BGPRIB_NID, RIB_NID, RIB_NID, LOCRIB_NID,
TABLES_NID, TABLES_NID, ROUTES_NID, routesContainerIdentifier, routesListIdentifier, routesListIdentifier);
relativeRoutesPath = ImmutableList.of(routesContainerIdentifier, routesListIdentifier);
routeKeyTemplate = ImmutableOffsetMapTemplate.ordered(
@Override
public final Collection<DataTreeCandidateNode> changedRoutes(final DataTreeCandidateNode routes) {
- return routes.getModifiedChild(routesContainerIdentifier)
- .flatMap(myRoutes -> myRoutes.getModifiedChild(routeNid()))
- // Well, given the remote possibility of augmentation, we should perform a filter here,
- // to make sure the type matches what routeType() reports.
- .map(DataTreeCandidateNode::getChildNodes)
- .orElse(Collections.emptySet());
+ final var myRoutes = routes.modifiedChild(routesContainerIdentifier);
+ if (myRoutes != null) {
+ final var route = myRoutes.modifiedChild(routeNid());
+ if (route != null) {
+ // Well, given the remote possibility of augmentation, we should perform a filter here,
+ // to make sure the type matches what routeType() reports.
+ return route.childNodes();
+ }
+ }
+ return Set.of();
}
@Override
final NodeIdentifierWithPredicates routeKey, final DataContainerNode route,
final ContainerNode attributes) {
// Build the DataContainer data
- final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> b =
- ImmutableNodes.mapEntryBuilder();
- b.withNodeIdentifier(routeKey);
-
+ final var b = ImmutableNodes.mapEntryBuilder().withNodeIdentifier(routeKey);
route.body().forEach(b::withChild);
// Add attributes
- final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> cb =
- Builders.containerBuilder(attributes);
- cb.withNodeIdentifier(routeAttributesIdentifier());
- b.withChild(cb.build());
+ b.withChild(Builders.containerBuilder(attributes).withNodeIdentifier(routeAttributesIdentifier()).build());
tx.put(LogicalDatastoreType.OPERATIONAL, base.node(routeKey), b.build());
}
}
@Override
public ContainerNode attributeToContainerNode(final YangInstanceIdentifier attPath, final Attributes attributes) {
- final InstanceIdentifier<DataObject> iid = mappingService.fromYangInstanceIdentifier(attPath);
- return (ContainerNode) verifyNotNull(mappingService.toNormalizedNode(iid, attributes).getValue());
+ final var iid = mappingService.fromYangInstanceIdentifier(attPath);
+ return (ContainerNode) verifyNotNull(mappingService.toNormalizedDataObject(iid, attributes).node());
}
@Override
*/
package org.opendaylight.protocol.bgp.rib.spi;
-import static org.opendaylight.protocol.bgp.rib.spi.RIBQNames.LLGR_STALE_QNAME;
-
-import com.google.common.annotations.Beta;
-import com.google.common.collect.ImmutableSet;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.BgpRib;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.bgp.rib.Rib;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.bgp.rib.rib.LocRib;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.Tables;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Attributes;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Routes;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
/**
* Utility constant {@link NodeIdentifier}s for various RIB constructs.
*/
-@Beta
public final class RIBNodeIdentifiers {
public static final NodeIdentifier BGPRIB_NID = NodeIdentifier.create(BgpRib.QNAME);
public static final NodeIdentifier RIB_NID = NodeIdentifier.create(Rib.QNAME);
public static final NodeIdentifier ROUTES_NID = NodeIdentifier.create(Routes.QNAME);
public static final NodeIdentifier ATTRIBUTES_NID = NodeIdentifier.create(Attributes.QNAME);
- // Unfortunate side-effect of how yang-data-api operates, we need to deal with the augmentation identifier
- public static final AugmentationIdentifier ADJRIBIN_ATTRIBUTES_AID = new AugmentationIdentifier(
- ImmutableSet.of(LLGR_STALE_QNAME));
-
public static final NodeIdentifier UPTODATE_NID = NodeIdentifier.create(RIBQNames.UPTODATE_QNAME);
public static final NodeIdentifier LLGR_STALE_NID = NodeIdentifier.create(RIBQNames.LLGR_STALE_QNAME);
private RIBNodeIdentifiers() {
-
+ // Hidden on purpose
}
}
import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractConcurrentDataBrokerTest;
import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractDataBrokerTestCustomizer;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingDataObjectCodecTreeNode;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer.NodeResult;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.PathId;
import org.opendaylight.yangtools.yang.binding.ChildOf;
import org.opendaylight.yangtools.yang.binding.ChoiceIn;
import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.Identifiable;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.KeyAware;
import org.opendaylight.yangtools.yang.common.Uint32;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
public abstract class AbstractRIBSupportTest<C extends Routes & DataObject & ChoiceIn<Tables>,
S extends ChildOf<? super C>,
- R extends Route & ChildOf<? super S> & Identifiable<?>> extends AbstractConcurrentDataBrokerTest {
- protected static final PathId PATH_ID = new PathId(Uint32.ONE);
- protected static final Attributes ATTRIBUTES = new AttributesBuilder().build();
+ R extends Route & ChildOf<? super S> & KeyAware<?>> extends AbstractConcurrentDataBrokerTest {
+ protected static final @NonNull PathId PATH_ID = new PathId(Uint32.ONE);
+ protected static final @NonNull Attributes ATTRIBUTES = new AttributesBuilder().build();
private static final InstanceIdentifier<LocRib> RIB = InstanceIdentifier.builder(BgpRib.class)
.child(Rib.class, new RibKey(new RibId("rib"))).child(LocRib.class).build();
}
private @NonNull BindingDataObjectCodecTreeNode<Attributes> updateAttributesCodec() {
- return adapter.currentSerializer().streamChild(Update.class).streamChild(Attributes.class);
+ return adapter.currentSerializer().getStreamChild(Update.class).getStreamDataObject(Attributes.class);
}
protected final ContainerNode createNlriWithDrawnRoute(final DestinationType destUnreach) {
return (ContainerNode) updateAttributesCodec()
- .streamChild(AttributesUnreach.class).streamChild(MpUnreachNlri.class)
+ .getStreamChild(AttributesUnreach.class).getStreamDataObject(MpUnreachNlri.class)
.serialize(new MpUnreachNlriBuilder()
.setWithdrawnRoutes(new WithdrawnRoutesBuilder().setDestinationType(destUnreach).build())
.build());
protected final ContainerNode createNlriAdvertiseRoute(final DestinationType destReach) {
return (ContainerNode) updateAttributesCodec()
- .streamChild(AttributesReach.class).streamChild(MpReachNlri.class)
+ .getStreamChild(AttributesReach.class).getStreamDataObject(MpReachNlri.class)
.serialize(new MpReachNlriBuilder()
.setAdvertizedRoutes(new AdvertizedRoutesBuilder().setDestinationType(destReach).build())
.build());
final Tables tables = new TablesBuilder().withKey(abstractRIBSupport.getTablesKey())
.setAttributes(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329
.rib.tables.AttributesBuilder().build()).build();
- return (MapEntryNode) adapter.currentSerializer().toNormalizedNode(tablesIId(), tables).getValue();
+ return (MapEntryNode) adapter.currentSerializer().toNormalizedDataObject(tablesIId(), tables).node();
}
protected final ChoiceNode createRoutes(final Routes routes) {
final Tables tables = new TablesBuilder().withKey(abstractRIBSupport.getTablesKey()).setRoutes(routes).build();
return (ChoiceNode) verifyNotNull(((MapEntryNode) adapter.currentSerializer()
- .toNormalizedNode(tablesIId(), tables).getValue())
+ .toNormalizedDataObject(tablesIId(), tables).node())
.childByArg(new NodeIdentifier(Routes.QNAME)));
}
Preconditions.checkArgument(routes.implementedInterface()
.equals(abstractRIBSupport.routesContainerClass()));
final InstanceIdentifier<S> routesIId = routesIId();
- final Map.Entry<YangInstanceIdentifier, NormalizedNode> normalizedNode = adapter.currentSerializer()
- .toNormalizedNode(routesIId, routes);
- final ContainerNode container = (ContainerNode) normalizedNode.getValue();
+ final NodeResult normalizedNode = adapter.currentSerializer().toNormalizedDataObject(routesIId, routes);
+ final ContainerNode container = (ContainerNode) normalizedNode.node();
final NodeIdentifier routeNid = new NodeIdentifier(abstractRIBSupport.routeQName());
return ((MapNode) container.getChildByArg(routeNid)).body();
}
protected final NodeIdentifierWithPredicates createRouteNIWP(final S routes) {
final Collection<MapEntryNode> map = createRoutes(routes);
- return Iterables.getOnlyElement(map).getIdentifier();
+ return Iterables.getOnlyElement(map).name();
}
}
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
-import java.util.Optional;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
subTree = Mockito.mock(DataTreeCandidateNode.class);
final DataTreeCandidateNode emptyNode = Mockito.mock(DataTreeCandidateNode.class);
final DataTreeCandidateNode node = Mockito.mock(DataTreeCandidateNode.class);
- doReturn(Optional.empty()).when(emptyTree).getModifiedChild(IPV4_ROUTES_IDENTIFIER);
+ doReturn(null).when(emptyTree).modifiedChild(IPV4_ROUTES_IDENTIFIER);
- doReturn(Optional.of(emptyNode)).when(emptySubTree).getModifiedChild(IPV4_ROUTES_IDENTIFIER);
- doReturn(Optional.empty()).when(emptyNode).getModifiedChild(new NodeIdentifier(Ipv4Route.QNAME));
+ doReturn(emptyNode).when(emptySubTree).modifiedChild(IPV4_ROUTES_IDENTIFIER);
+ doReturn(null).when(emptyNode).modifiedChild(new NodeIdentifier(Ipv4Route.QNAME));
- doReturn(Optional.of(node)).when(subTree).getModifiedChild(IPV4_ROUTES_IDENTIFIER);
- doReturn(Optional.of(node)).when(node).getModifiedChild(new NodeIdentifier(Ipv4Route.QNAME));
- final Collection<DataTreeCandidateNode> emptyCollection = new HashSet<>();
- doReturn(emptyCollection).when(node).getChildNodes();
+ doReturn(node).when(subTree).modifiedChild(IPV4_ROUTES_IDENTIFIER);
+ doReturn(node).when(node).modifiedChild(new NodeIdentifier(Ipv4Route.QNAME));
+ doReturn(Set.of()).when(node).childNodes();
tx = Mockito.mock(DOMDataTreeWriteTransaction.class);
nlri = Mockito.mock(ContainerNode.class);
doReturn(destination).when(nlri).childByArg(new NodeIdentifier(AdvertizedRoutes.QNAME));
doReturn(destinations).when(destination).childByArg(new NodeIdentifier(DestinationType.QNAME));
doReturn(route).when(destinations).childByArg(new NodeIdentifier(Ipv4Prefixes.QNAME));
- doReturn(emptyCollection).when(route).body();
+ doReturn(Set.of()).when(route).body();
doAnswer(invocation -> {
- final Object[] args = invocation.getArguments();
- routesMap.remove(args[1]);
- return args[1];
+ final var arg = invocation.getArgument(1);
+ routesMap.remove(arg);
+ return arg;
}).when(tx).delete(Mockito.eq(LogicalDatastoreType.OPERATIONAL), any(YangInstanceIdentifier.class));
doAnswer(invocation -> {
final Object[] args = invocation.getArguments();
final var attr = edge.getEdgeAttributes();
PrefixBuilder prefBuilder = new PrefixBuilder().setVertexId(srcId);
if (attr.getLocalAddress() != null) {
- prefBuilder.setPrefix(new IpPrefix(IetfInetUtil.INSTANCE.ipv4PrefixFor(attr.getLocalAddress())));
+ prefBuilder.setPrefix(new IpPrefix(IetfInetUtil.ipv4PrefixFor(attr.getLocalAddress())));
}
if (attr.getLocalAddress6() != null) {
- prefBuilder.setPrefix(new IpPrefix(IetfInetUtil.INSTANCE.ipv6PrefixFor(attr.getLocalAddress6())));
+ prefBuilder.setPrefix(new IpPrefix(IetfInetUtil.ipv6PrefixFor(attr.getLocalAddress6())));
}
Prefix prefix = prefBuilder.build();
}
private static Uint64 ipv4ToKey(final Ipv4InterfaceIdentifier ifId) {
- return Uint32.fromIntBits(IetfInetUtil.INSTANCE.ipv4AddressNoZoneBits(ifId)).toUint64();
+ return Uint32.fromIntBits(IetfInetUtil.ipv4AddressNoZoneBits(ifId)).toUint64();
}
@VisibleForTesting
static Uint64 ipv6ToKey(final Ipv6InterfaceIdentifier ifId) {
- final byte[] ip = IetfInetUtil.INSTANCE.ipv6AddressNoZoneBytes(ifId);
+ final byte[] ip = IetfInetUtil.ipv6AddressNoZoneBytes(ifId);
// Keep only the lower 64bits from the IP address, i.e. we skip first Long.BYTES bytes
return Uint64.fromLongBits(ByteBuffer.wrap(ip, Long.BYTES, Long.BYTES).getLong());
}
<parent>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>binding-parent</artifactId>
- <version>11.0.9</version>
+ <version>12.0.0-SNAPSHOT</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
if (mr != null) {
final Rfc2385Key password = mr.getPassword();
if (password != null && !password.getValue().isEmpty()) {
- passwords.put(IetfInetUtil.INSTANCE.inetAddressForNoZone(mr.getAddress()), password.getValue());
+ passwords.put(IetfInetUtil.inetAddressForNoZone(mr.getAddress()), password.getValue());
}
}
}
this.peerId = peerId;
peerYangIId = YangInstanceIdentifier.builder(peersYangIId).nodeWithKey(Peer.QNAME, PEER_ID_QNAME,
this.peerId.getValue()).build();
- sentOpenCodec = tree.getSubtreeCodec(SENT_OPEN_IID);
- receivedOpenCodec = tree.getSubtreeCodec(RECEIVED_OPEN_IID);
+ sentOpenCodec = (BindingDataObjectCodecTreeNode<SentOpen>) tree.getSubtreeCodec(SENT_OPEN_IID);
+ receivedOpenCodec = (BindingDataObjectCodecTreeNode<ReceivedOpen>) tree.getSubtreeCodec(RECEIVED_OPEN_IID);
final Set<TablesKey> peerTables = setPeerTables(peerUp.getReceivedOpen());
final DOMDataTreeWriteTransaction wTx = this.domTxChain.newWriteOnlyTransaction();
}
private static String toDom(final MirrorInformationCode informationCode) {
- switch (informationCode) {
- case ErroredPdu:
- return "errored-pdu";
- case MessageLost:
- return "message-lost";
- default:
- return null;
- }
+ return switch (informationCode) {
+ case ErroredPdu -> "errored-pdu";
+ case MessageLost -> "message-lost";
+ default -> null;
+ };
}
private static String getStringIpAddress(final IpAddressNoZone ipAddress) {
checkState(tableCodecContext instanceof BindingDataObjectCodecTreeNode);
final BindingDataObjectCodecTreeNode<?> routeListCodec = ((BindingDataObjectCodecTreeNode)tableCodecContext)
- .streamChild(Routes.class)
- .streamChild(this.tableSupport.routesCaseClass())
- .streamChild(this.tableSupport.routesContainerClass())
- .streamChild(this.tableSupport.routesListClass());
+ .getStreamChild(Routes.class)
+ .getStreamChild(this.tableSupport.routesCaseClass())
+ .getStreamChild(this.tableSupport.routesContainerClass())
+ .getStreamDataObject(this.tableSupport.routesListClass());
- attributesCodec = routeListCodec.streamChild(Attributes.class)
+ attributesCodec = routeListCodec.getStreamDataObject(Attributes.class)
.createCachingCodec(this.tableSupport.cacheableAttributeObjects());
- final var updateAttributesCodec = tree.streamChild(Update.class)
- .streamChild(Attributes.class);
- reachNlriCodec = updateAttributesCodec.streamChild(AttributesReach.class)
- .streamChild(MpReachNlri.class)
+ final var updateAttributesCodec = tree.getStreamChild(Update.class)
+ .getStreamDataObject(Attributes.class);
+ reachNlriCodec = updateAttributesCodec.getStreamChild(AttributesReach.class)
+ .getStreamDataObject(MpReachNlri.class)
.createCachingCodec(this.tableSupport.cacheableNlriObjects());
- unreachNlriCodec = updateAttributesCodec.streamChild(AttributesUnreach.class)
- .streamChild(MpUnreachNlri.class)
+ unreachNlriCodec = updateAttributesCodec.getStreamChild(AttributesUnreach.class)
+ .getStreamDataObject(MpUnreachNlri.class)
.createCachingCodec(this.tableSupport.cacheableNlriObjects());
}
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<groupId>${project.groupId}</groupId>
<artifactId>config-loader-spi</artifactId>
</dependency>
+ <dependency>
+ <groupId>com.github.spotbugs</groupId>
+ <artifactId>spotbugs-annotations</artifactId>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.checkerframework</groupId>
+ <artifactId>checker-qual</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jdt</groupId>
+ <artifactId>org.eclipse.jdt.annotation</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-model-api</artifactId>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-binding-runtime-api</artifactId>
</dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
- <dependency>
- <groupId>org.checkerframework</groupId>
- <artifactId>checker-qual</artifactId>
- <scope>provided</scope>
- </dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.service.component.annotations</artifactId>
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
-import java.net.URISyntaxException;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.util.ArrayList;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
+import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.model.api.EffectiveStatementInference;
import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.xml.sax.SAXException;
/**
* Reference implementation of configuration loading bits, without worrying where files are actually coming from.
context.updateSchemaNode(currentContext);
final ProcessorRegistration reg = new ProcessorRegistration();
- this.configServices.put(reg, context);
+ configServices.put(reg, context);
final File[] fList = directory().listFiles();
if (fList != null) {
@Holding("this")
private NormalizedNode parseDefaultConfigFile(final EffectiveStatementInference schema, final String filename)
throws IOException, XMLStreamException {
- final NormalizedNodeResult result = new NormalizedNodeResult();
- final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
+ final NormalizationResultHolder resultHolder = new NormalizationResultHolder();
+ final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(resultHolder);
final File newFile = new File(directory(), filename);
try (RandomAccessFile raf = new RandomAccessFile(newFile, READ)) {
try (XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schema)) {
xmlParser.parse(reader);
- } catch (final URISyntaxException | XMLStreamException | IOException | SAXException e) {
+ } catch (XMLStreamException | IOException e) {
LOG.warn("Failed to parse xml", e);
} finally {
reader.close();
}
}
- return result.getResult();
+ return resultHolder.getResult().data();
}
}
<name>${project.artifactId}</name>
<dependencies>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>concepts</artifactId>
- </dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.eclipse.jdt</groupId>
+ <artifactId>org.eclipse.jdt.annotation</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>concepts</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-data-api</artifactId>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<groupId>${project.groupId}</groupId>
<artifactId>config-loader-spi</artifactId>
</dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-model-api</artifactId>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-data-api</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yang-common</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-common-api</artifactId>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-dom-api</artifactId>
</dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.service.component.annotations</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.mdsal</groupId>
+ <artifactId>mdsal-binding-api</artifactId>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>testtool-util</artifactId>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>karaf4-parent</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
</dependency>
<dependency>
<groupId>org.opendaylight.netconf</groupId>
- <artifactId>features-restconf</artifactId>
+ <artifactId>features-netconf</artifactId>
<classifier>features</classifier>
<type>xml</type>
<scope>runtime</scope>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>feature-repo-parent</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-bgp-benchmark" version="${project.version}">
- <feature version="[7,8)">odl-mdsal-broker</feature>
- <feature version="[7,8)">odl-controller-blueprint</feature>
+ <feature version="[8,9)">odl-mdsal-broker</feature>
+ <feature version="[8,9)">odl-controller-blueprint</feature>
</feature>
</features>
-->
<features name="odl-bgpcep-bgp-dependencies-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.4.0">
<feature name="odl-bgpcep-bgp-dependencies" version="${project.version}">
- <feature version="[10,11)">odl-yangtools-data-api</feature>
+ <feature version="[11,12)">odl-yangtools-data-api</feature>
</feature>
</features>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-bgp-evpn" version="${project.version}">
- <feature version="[11,12)">odl-mdsal-rfc8294-netty</feature>
+ <feature version="[12,13)">odl-mdsal-rfc8294-netty</feature>
</feature>
</features>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-bgp-labeled-unicast" version="${project.version}">
- <feature version="[11,12)">odl-mdsal-rfc8294-netty</feature>
+ <feature version="[12,13)">odl-mdsal-rfc8294-netty</feature>
</feature>
</features>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-bgp-linkstate" version="${project.version}">
- <feature version="[7,8)">odl-mdsal-broker</feature>
- <feature version="[11,12)">odl-mdsal-rfc8294-netty</feature>
+ <feature version="[8,9)">odl-mdsal-broker</feature>
+ <feature version="[12,13)">odl-mdsal-rfc8294-netty</feature>
</feature>
</features>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-bgp-openconfig-rp-impl" version="${project.version}">
- <feature version="[7,8)">odl-mdsal-broker</feature>
+ <feature version="[8,9)">odl-mdsal-broker</feature>
</feature>
</features>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-bgp-openconfig-rp-statement" version="${project.version}">
- <feature version="[7,8)">odl-mdsal-broker</feature>
+ <feature version="[8,9)">odl-mdsal-broker</feature>
</feature>
</features>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-bgp-parser-api" version="${project.version}">
- <feature version="[10,11)">odl-yangtools-data</feature>
- <feature version="[10,11)">odl-yangtools-netty</feature>
+ <feature version="[11,12)">odl-yangtools-data</feature>
+ <feature version="[11,12)">odl-yangtools-netty</feature>
</feature>
</features>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-bgp-rib-api" version="${project.version}">
- <feature version="[11,12)">odl-mdsal-model-rfc8343</feature>
- <feature version="[11,12)">odl-mdsal-singleton-common</feature>
- <feature version="[11,12)">odl-mdsal-dom-api</feature>
- <feature version="[11,12)">odl-mdsal-binding-runtime</feature>
+ <feature version="[12,13)">odl-mdsal-model-rfc8343</feature>
+ <feature version="[12,13)">odl-mdsal-singleton-common</feature>
+ <feature version="[12,13)">odl-mdsal-dom-api</feature>
+ <feature version="[12,13)">odl-mdsal-binding-runtime</feature>
</feature>
</features>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-bgp-rib-impl" version="${project.version}">
- <feature version="[7,8)">odl-controller-blueprint</feature>
- <feature version="[7,8)">odl-controller-exp-netty-config</feature>
+ <feature version="[8,9)">odl-controller-blueprint</feature>
+ <feature version="[8,9)">odl-controller-exp-netty-config</feature>
<configfile finalname="etc/opendaylight/bgpcep/routing-policy-default-config.xml">mvn:org.opendaylight.bgpcep/bgp-config-example/${project.version}/xml/routing-policy-default-config</configfile>
</feature>
</features>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
-->
<features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-bgpcep-data-change-counter-${project.version}">
<feature name="odl-bgpcep-data-change-counter" version="${project.version}">
- <feature version="[11,12)">odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal</feature>
- <feature version="[7,8)">odl-mdsal-broker</feature>
+ <feature version="[12,13)">odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal</feature>
+ <feature version="[8,9)">odl-mdsal-broker</feature>
</feature>
</features>
-->
<features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-bgpcep-${project.version}">
<feature name="odl-bgpcep-extras-dependencies" version="${project.version}">
- <feature version="[12,13)">odl-netty-4</feature>
+ <feature version="[13,14)">odl-netty-4</feature>
</feature>
</features>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-concepts" version="${project.version}">
- <feature version="[11,12)">odl-mdsal-model-rfc6991</feature>
- <feature version="[11,12)">odl-mdsal-model-rfc8294</feature>
+ <feature version="[12,13)">odl-mdsal-model-rfc6991</feature>
+ <feature version="[12,13)">odl-mdsal-model-rfc8294</feature>
</feature>
</features>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-bmp-config-loader" version="${project.version}">
- <feature version="[7,8)">odl-mdsal-broker</feature>
+ <feature version="[8,9)">odl-mdsal-broker</feature>
</feature>
</features>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-config-loader-impl" version="${project.version}">
- <feature version="[10,11)">odl-yangtools-codec</feature>
+ <feature version="[11,12)">odl-yangtools-codec</feature>
</feature>
</features>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-config-loader-spi" version="${project.version}">
- <feature version="[11,12)">odl-mdsal-binding-runtime</feature>
+ <feature version="[12,13)">odl-mdsal-binding-runtime</feature>
</feature>
</features>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-topology-config-loader" version="${project.version}">
- <feature version="[7,8)">odl-mdsal-broker</feature>
+ <feature version="[8,9)">odl-mdsal-broker</feature>
</feature>
</features>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-graph-api" version="${project.version}">
- <feature version="[11,12)">odl-mdsal-model-rfc6991</feature>
- <feature version="[11,12)">odl-mdsal-model-rfc8294</feature>
+ <feature version="[12,13)">odl-mdsal-model-rfc6991</feature>
+ <feature version="[12,13)">odl-mdsal-model-rfc8294</feature>
</feature>
</features>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-graph" version="${project.version}">
- <feature version="[7,8)">odl-mdsal-broker</feature>
+ <feature version="[8,9)">odl-mdsal-broker</feature>
</feature>
</features>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-pcep-impl" version="${project.version}">
- <feature version="[7,8)">odl-controller-exp-netty-config</feature>
- <feature version="[7,8)">odl-mdsal-broker</feature>
+ <feature version="[8,9)">odl-controller-exp-netty-config</feature>
+ <feature version="[8,9)">odl-mdsal-broker</feature>
</feature>
</features>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-pcep-p2mp-te-lsp" version="${project.version}">
- <feature version="[7,8)">odl-mdsal-broker</feature>
+ <feature version="[8,9)">odl-mdsal-broker</feature>
</feature>
</features>
-->
<features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-bgpcep-${project.version}">
<feature name="odl-bgpcep-pcep-tunnel-provider" version="${project.version}">
- <feature version="[12,13)">odl-apache-commons-lang3</feature>
+ <feature version="[13,14)">odl-apache-commons-lang3</feature>
</feature>
</features>
-->
<features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-bgpcep-programming-api-${project.version}">
<feature name="odl-bgpcep-programming-api" version="${project.version}">
- <feature version="[11,12)">odl-mdsal-singleton-common</feature>
+ <feature version="[12,13)">odl-mdsal-singleton-common</feature>
</feature>
</features>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-programming-impl" version="${project.version}">
- <feature version="[7,8)">odl-controller-exp-netty-config</feature>
- <feature version="[7,8)">odl-mdsal-broker</feature>
+ <feature version="[8,9)">odl-controller-exp-netty-config</feature>
+ <feature version="[8,9)">odl-mdsal-broker</feature>
</feature>
</features>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-rsvp-api" version="${project.version}">
- <feature version="[10,11)">odl-yangtools-netty</feature>
+ <feature version="[11,12)">odl-yangtools-netty</feature>
</feature>
</features>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
<feature name="odl-bgpcep-topology-api" version="${project.version}">
- <feature version="[11,12)">odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal</feature>
+ <feature version="[12,13)">odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal</feature>
</feature>
</features>
-->
<features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-bgpcep-topology-tunnel-api-${project.version}">
<feature name="odl-bgpcep-topology-tunnel-api" version="${project.version}">
- <feature version="[11,12)">odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal</feature>
+ <feature version="[12,13)">odl-mdsal-model-draft-clemm-netmod-yang-network-topo-01-minimal</feature>
</feature>
</features>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<name>${project.artifactId}</name>
<dependencies>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
<artifactId>rfc6991-ietf-inet-types</artifactId>
<groupId>org.opendaylight.mdsal.model</groupId>
<artifactId>ietf-topology</artifactId>
</dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>yang-common</artifactId>
- </dependency>
</dependencies>
</project>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<groupId>${project.groupId}</groupId>
<artifactId>graph-api</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.eclipse.jdt</groupId>
+ <artifactId>org.eclipse.jdt.annotation</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>concepts</artifactId>
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.graph.rev220720.graph.topology.graph.VertexKey;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
import org.opendaylight.yangtools.yang.common.Uint32;
-import org.opendaylight.yangtools.yang.common.Uint64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private final ConnectedGraphServer connectedGraphServer;
public ConnectedGraphImpl(final Graph newGraph, final ConnectedGraphServer server) {
- this.graph = newGraph;
+ graph = newGraph;
createConnectedGraph();
- this.connectedGraphServer = server;
+ connectedGraphServer = server;
}
/**
*
*/
private void createConnectedGraph() {
- if (this.graph == null) {
+ if (graph == null) {
return;
}
/* Add all vertices */
- for (Vertex vertex : this.graph.nonnullVertex().values()) {
+ for (Vertex vertex : graph.nonnullVertex().values()) {
ConnectedVertexImpl cvertex = new ConnectedVertexImpl(vertex);
vertices.put(cvertex.getKey(), cvertex);
}
/* Add all edges */
- for (Edge edge : this.graph.nonnullEdge().values()) {
+ for (Edge edge : graph.nonnullEdge().values()) {
ConnectedEdgeImpl cedge = new ConnectedEdgeImpl(edge);
edges.put(cedge.getKey(), cedge);
}
/* Add all prefixes */
- for (Prefix prefix : this.graph.nonnullPrefix().values()) {
+ for (Prefix prefix : graph.nonnullPrefix().values()) {
ConnectedVertexImpl cvertex = vertices.get(prefix.getVertexId().longValue());
if (cvertex != null) {
cvertex.addPrefix(prefix);
@Override
public Graph getGraph() {
- return this.graph;
+ return graph;
}
@Override
public List<ConnectedVertex> getVertices() {
- return new ArrayList<>(this.vertices.values());
+ return new ArrayList<>(vertices.values());
}
@Override
@Override
public List<ConnectedEdge> getEdges() {
- return new ArrayList<>(this.edges.values());
+ return new ArrayList<>(edges.values());
}
@Override
@Override
public ConnectedEdge getConnectedEdge(final Ipv4Address address) {
- if (address == null) {
- return null;
- }
- final Uint64 key = Uint32.fromIntBits(IetfInetUtil.INSTANCE.ipv4AddressBits(address)).toUint64();
- return getConnectedEdge(key.longValue());
+ return address == null ? null : getConnectedEdge(
+ Uint32.fromIntBits(IetfInetUtil.ipv4AddressBits(address)).longValue());
}
@Override
public ConnectedEdge getConnectedEdge(final Ipv6Address address) {
- if (address == null) {
- return null;
- }
- final byte[] ip = IetfInetUtil.INSTANCE.ipv6AddressBytes(address);
- final Uint64 key = Uint64.fromLongBits(ByteBuffer.wrap(ip, Long.BYTES, Long.BYTES).getLong());
- return getConnectedEdge(key.longValue());
+ return address == null ? null : getConnectedEdge(
+ ByteBuffer.wrap(IetfInetUtil.ipv6AddressBytes(address), Long.BYTES, Long.BYTES).getLong());
}
@Override
@Override
public List<Prefix> getPrefixes() {
- return new ArrayList<>(this.prefixes.values());
+ return new ArrayList<>(prefixes.values());
}
@Override
public Prefix getPrefix(final IpPrefix prefix) {
- return this.prefixes.get(prefix);
+ return prefixes.get(prefix);
}
- private void callVertexTrigger(ConnectedVertexImpl cvertex, Vertex vertex) {
+ private void callVertexTrigger(final ConnectedVertexImpl cvertex, final Vertex vertex) {
List<ConnectedVertexTrigger> vertexTriggers = cvertex.getTriggers();
if (vertexTriggers == null || vertexTriggers.isEmpty()) {
return;
}
for (ConnectedGraphTrigger trigger : graphTriggers.values()) {
- this.exec.submit(() -> trigger.verifyVertex(vertexTriggers, cvertex, vertex));
+ exec.submit(() -> trigger.verifyVertex(vertexTriggers, cvertex, vertex));
}
}
checkArgument(vertex != null, "Provided Vertex is a null object");
ConnectedVertexImpl cvertex = updateConnectedVertex(vertex.getVertexId().longValue());
Vertex old = cvertex.getVertex();
- this.connectedGraphServer.addVertex(this.graph, vertex, old);
+ connectedGraphServer.addVertex(graph, vertex, old);
cvertex.setVertex(vertex);
if (old != null) {
callVertexTrigger(cvertex, old);
if (cvertex != null) {
cvertex.disconnect();
vertices.remove(cvertex.getKey());
- this.connectedGraphServer.deleteVertex(this.graph, cvertex.getVertex());
+ connectedGraphServer.deleteVertex(graph, cvertex.getVertex());
cvertex.setVertex(null);
callVertexTrigger(cvertex, null);
}
}
- private void callEdgeTrigger(ConnectedEdgeImpl cedge, Edge edge) {
+ private void callEdgeTrigger(final ConnectedEdgeImpl cedge, final Edge edge) {
List<ConnectedEdgeTrigger> edgeTriggers = cedge.getTriggers();
if (edgeTriggers == null || edgeTriggers.isEmpty()) {
return;
}
for (ConnectedGraphTrigger trigger : graphTriggers.values()) {
- this.exec.submit(() -> trigger.verifyEdge(edgeTriggers, cedge, edge));
+ exec.submit(() -> trigger.verifyEdge(edgeTriggers, cedge, edge));
}
}
}
connectVertices(source, destination, cedge);
}
- this.connectedGraphServer.addEdge(this.graph, edge, old);
+ connectedGraphServer.addEdge(graph, edge, old);
cedge.setEdge(edge);
callEdgeTrigger(cedge, old);
return cedge;
checkArgument(key != null, "Provided Edge Key is a null object");
ConnectedEdgeImpl cedge = edges.get(key.getEdgeId().longValue());
if (cedge != null) {
- this.connectedGraphServer.deleteEdge(this.graph, cedge.getEdge());
+ connectedGraphServer.deleteEdge(graph, cedge.getEdge());
cedge.disconnect();
cedge.setEdge(null);
callEdgeTrigger(cedge, null);
ConnectedVertexImpl cvertex = updateConnectedVertex(prefix.getVertexId().longValue());
cvertex.addPrefix(prefix);
prefixes.putIfAbsent(prefix.getPrefix(), prefix);
- this.connectedGraphServer.addPrefix(this.graph, prefix);
+ connectedGraphServer.addPrefix(graph, prefix);
}
@Override
cvertex.removePrefix(prefix);
}
prefixes.remove(prefix.getPrefix());
- this.connectedGraphServer.deletePrefix(this.graph, prefix);
+ connectedGraphServer.deletePrefix(graph, prefix);
}
}
@Override
public void clear() {
LOG.info("Reset Connected Graph({})", graph.getName());
- this.vertices.clear();
- this.edges.clear();
- this.prefixes.clear();
- this.connectedGraphServer.clearGraph(this.graph);
- this.graph = null;
+ vertices.clear();
+ edges.clear();
+ prefixes.clear();
+ connectedGraphServer.clearGraph(graph);
+ graph = null;
}
@Override
}
@Override
- public boolean registerTrigger(ConnectedGraphTrigger trigger, TopologyKey key) {
+ public boolean registerTrigger(final ConnectedGraphTrigger trigger, final TopologyKey key) {
return graphTriggers.putIfAbsent(key, trigger) == null;
}
@Override
- public boolean unRegisterTrigger(ConnectedGraphTrigger trigger, TopologyKey key) {
+ public boolean unRegisterTrigger(final ConnectedGraphTrigger trigger, final TopologyKey key) {
return graphTriggers.remove(key, trigger);
}
*/
@Override
public String toString() {
- return this.graph.getName();
+ return graph.getName();
}
}
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>bundle-parent</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<dependency>
<groupId>org.opendaylight.controller</groupId>
<artifactId>controller-artifacts</artifactId>
- <version>7.0.6</version>
+ <version>8.0.0-SNAPSHOT</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yangtools-artifacts</artifactId>
- <version>10.0.6</version>
+ <version>11.0.0</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-artifacts</artifactId>
- <version>11.0.9</version>
+ <version>12.0.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.opendaylight.netconf</groupId>
<artifactId>netconf-artifacts</artifactId>
- <version>5.0.6</version>
+ <version>6.0.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.opendaylight.infrautils</groupId>
<artifactId>infrautils-artifacts</artifactId>
- <version>5.0.4</version>
+ <version>6.0.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<artifactId>testtool-util</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>com.github.spotbugs</groupId>
+ <artifactId>spotbugs-annotations</artifactId>
+ <optional>true</optional>
+ </dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-buffer</artifactId>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<groupId>${project.groupId}</groupId>
<artifactId>topology-api</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.eclipse.jdt</groupId>
+ <artifactId>org.eclipse.jdt.annotation</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yang-common</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-common-api</artifactId>
<groupId>${project.groupId}</groupId>
<artifactId>concepts</artifactId>
</dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty-buffer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jdt</groupId>
+ <artifactId>org.eclipse.jdt.annotation</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>concepts</artifactId>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>yang-binding</artifactId>
</dependency>
- <dependency>
- <groupId>io.netty</groupId>
- <artifactId>netty-buffer</artifactId>
- </dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
<dependency>
<groupId>com.guicedee.services</groupId>
<artifactId>javax.inject</artifactId>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
// Our augmentation in the topology node
final PathComputationClientBuilder pccBuilder = new PathComputationClientBuilder()
- .setIpAddress(IetfInetUtil.INSTANCE.ipAddressNoZoneFor(peerAddress));
+ .setIpAddress(IetfInetUtil.ipAddressNoZoneFor(peerAddress));
// Let subclass fill the details
updateStatefulCapabilities(pccBuilder, peerAddress, psession.getRemoteTlvs());
private static @NonNull InetSocketAddress getInetSocketAddress(final IpAddressNoZone address,
final PortNumber port) {
- return new InetSocketAddress(IetfInetUtil.INSTANCE.inetAddressForNoZone(requireNonNull(address)),
+ return new InetSocketAddress(IetfInetUtil.inetAddressForNoZone(requireNonNull(address)),
port.getValue().toJava());
}
}
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.eclipse.jdt</groupId>
+ <artifactId>org.eclipse.jdt.annotation</artifactId>
+ </dependency>
<!-- Testing dependencies -->
<dependency>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<name>${project.artifactId}</name>
<dependencies>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jdt</groupId>
+ <artifactId>org.eclipse.jdt.annotation</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-common</artifactId>
<groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
<artifactId>rfc6991-ietf-inet-types</artifactId>
</dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
</dependencies>
<scm>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<artifactId>programming-api</artifactId>
</dependency>
+ <dependency>
+ <groupId>com.github.spotbugs</groupId>
+ <artifactId>spotbugs-annotations</artifactId>
+ <optional>true</optional>
+ </dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.eclipse.jdt</groupId>
+ <artifactId>org.eclipse.jdt.annotation</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>concepts</artifactId>
<groupId>${project.groupId}</groupId>
<artifactId>concepts</artifactId>
</dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jdt</groupId>
+ <artifactId>org.eclipse.jdt.annotation</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-common</artifactId>
<groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
<artifactId>rfc6991-ietf-inet-types</artifactId>
</dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
</dependencies>
<scm>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>single-feature-parent</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<groupId>${project.groupId}</groupId>
<artifactId>concepts</artifactId>
</dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jdt</groupId>
+ <artifactId>org.eclipse.jdt.annotation</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-common</artifactId>
<groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
<artifactId>rfc6991-ietf-inet-types</artifactId>
</dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
</dependencies>
<build>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
- <ignoredUnusedDeclaredDependencies>
+ <ignoredUnusedDeclaredDependencies combine.children="append">
<ignoredUnusedDeclaredDependency>org.opendaylight.mdsal.model:yang-ext</ignoredUnusedDeclaredDependency>
</ignoredUnusedDeclaredDependencies>
</configuration>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
<parent>
<groupId>org.opendaylight.odlparent</groupId>
<artifactId>odlparent-lite</artifactId>
- <version>12.0.5</version>
+ <version>13.0.3</version>
<relativePath/>
</parent>
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
-import java.util.Map.Entry;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressNoZone;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
* @return Ipv4AddressNoZone
*/
public static Ipv4AddressNoZone addressForByteBuf(final ByteBuf buffer) {
- return IetfInetUtil.INSTANCE.ipv4AddressFor(ByteArray.readBytes(buffer, IP4_LENGTH));
+ return IetfInetUtil.ipv4AddressFor(ByteArray.readBytes(buffer, IP4_LENGTH));
}
/**
* @return byte array
*/
public static byte[] bytesForAddress(final Ipv4AddressNoZone address) {
- return IetfInetUtil.INSTANCE.ipv4AddressNoZoneBytes(address);
+ return IetfInetUtil.ipv4AddressNoZoneBytes(address);
}
public static int prefixBitsToBytes(final int bits) {
- if (bits % Byte.SIZE != 0) {
- return bits / Byte.SIZE + 1;
- }
- return bits / Byte.SIZE;
+ final int bytes = bits / Byte.SIZE;
+ return bits % Byte.SIZE == 0 ? bytes : bytes + 1;
}
/**
* @return byte array with prefix length at the end
*/
public static byte[] bytesForPrefix(final Ipv4Prefix prefix) {
- return IetfInetUtil.INSTANCE.ipv4PrefixToBytes(prefix);
+ return IetfInetUtil.ipv4PrefixToBytes(prefix);
}
/**
*/
public static Ipv4Prefix prefixForBytes(final byte[] bytes, final int length) {
checkArgument(length <= bytes.length * Byte.SIZE);
-
- final byte[] tmp;
- if (bytes.length != IP4_LENGTH) {
- tmp = Arrays.copyOfRange(bytes, 0, IP4_LENGTH);
- } else {
- tmp = bytes;
- }
-
- return IetfInetUtil.INSTANCE.ipv4PrefixFor(tmp, length);
+ return IetfInetUtil.ipv4PrefixFor(
+ bytes.length == IP4_LENGTH ? bytes : Arrays.copyOfRange(bytes, 0, IP4_LENGTH), length);
}
/**
* @return Ipv4Prefix object
*/
public static Ipv4Prefix prefixForByteBuf(final ByteBuf buf, final int prefixLength) {
- final int size = prefixLength / Byte.SIZE + (prefixLength % Byte.SIZE == 0 ? 0 : 1);
+ final int size = prefixBitsToBytes(prefixLength);
final int readable = buf.readableBytes();
checkArgument(size <= readable, "Illegal length of IP prefix: %s/%s", size, readable);
- final byte[] bytes = new byte[IP4_LENGTH];
+ final var bytes = new byte[IP4_LENGTH];
buf.readBytes(bytes, 0, size);
- return IetfInetUtil.INSTANCE.ipv4PrefixFor(bytes, prefixLength);
+ return IetfInetUtil.ipv4PrefixFor(bytes, prefixLength);
}
/**
*/
public static List<Ipv4Prefix> prefixListForBytes(final byte[] bytes) {
if (bytes.length == 0) {
- return Collections.emptyList();
+ return List.of();
}
- final List<Ipv4Prefix> list = new ArrayList<>();
+ final var list = new ArrayList<Ipv4Prefix>();
int byteOffset = 0;
while (byteOffset < bytes.length) {
final int bitLength = Byte.toUnsignedInt(bytes[byteOffset]);
continue;
}
- list.add(IetfInetUtil.INSTANCE.ipv4PrefixForShort(bytes, byteOffset, bitLength));
+ list.add(IetfInetUtil.ipv4PrefixForShort(bytes, byteOffset, bitLength));
byteOffset += bitLength / Byte.SIZE;
if (bitLength % Byte.SIZE != 0) {
byteOffset++;
* @return IpAddressNoZone
*/
public static IpAddressNoZone getIpAddress(final InetAddress inetAddress) {
- return IetfInetUtil.INSTANCE.ipAddressNoZoneFor(inetAddress);
+ return IetfInetUtil.ipAddressNoZoneFor(inetAddress);
}
/**
}
public static Ipv4Prefix incrementIpv4Prefix(final Ipv4Prefix ipv4Prefix) {
- final Entry<Ipv4AddressNoZone, Integer> splitIpv4Prefix = IetfInetUtil.INSTANCE.splitIpv4Prefix(ipv4Prefix);
- return IetfInetUtil.INSTANCE.ipv4PrefixFor(incrementIpv4Address(splitIpv4Prefix.getKey()),
- splitIpv4Prefix.getValue());
+ final var splitIpv4Prefix = IetfInetUtil.splitIpv4Prefix(ipv4Prefix);
+ return IetfInetUtil.ipv4PrefixFor(incrementIpv4Address(splitIpv4Prefix.getKey()), splitIpv4Prefix.getValue());
}
/**
* @return String value of Ipv4Address or Ipv6Address
*/
public static String toStringIP(final IpAddressNoZone ipAddress) {
- if (ipAddress.getIpv4AddressNoZone() != null) {
- return ipAddress.getIpv4AddressNoZone().getValue();
- }
- return ipAddress.getIpv6AddressNoZone().getValue();
+ final var ipv4 = ipAddress.getIpv4AddressNoZone();
+ return ipv4 != null ? ipv4.getValue() : ipAddress.getIpv6AddressNoZone().getValue();
}
/**
*/
public static void writeIpv4Address(final Ipv4AddressNoZone ipv4Address, final ByteBuf output) {
if (ipv4Address != null) {
- output.writeBytes(IetfInetUtil.INSTANCE.ipv4AddressNoZoneBytes(ipv4Address));
+ output.writeBytes(IetfInetUtil.ipv4AddressNoZoneBytes(ipv4Address));
} else {
output.writeInt(0);
}
}
public static void writeMinimalPrefix(final Ipv4Prefix ipv4Prefix, final ByteBuf output) {
- final byte[] bytes = IetfInetUtil.INSTANCE.ipv4PrefixToBytes(ipv4Prefix);
+ final var bytes = IetfInetUtil.ipv4PrefixToBytes(ipv4Prefix);
writeMinimalPrefix(output, bytes, bytes[IP4_LENGTH]);
}
import io.netty.buffer.Unpooled;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6AddressNoZone;
* @return Ipv6Address
*/
public static Ipv6AddressNoZone addressForByteBuf(final ByteBuf buffer) {
- return IetfInetUtil.INSTANCE.ipv6AddressFor(ByteArray.readBytes(buffer, IPV6_LENGTH));
+ return IetfInetUtil.ipv6AddressFor(ByteArray.readBytes(buffer, IPV6_LENGTH));
}
/**
* @return byte array
*/
public static byte[] bytesForAddress(final Ipv6AddressNoZone address) {
- return IetfInetUtil.INSTANCE.ipv6AddressNoZoneBytes(address);
+ return IetfInetUtil.ipv6AddressNoZoneBytes(address);
}
/**
* @return byte array with prefix length at the end
*/
public static byte[] bytesForPrefix(final Ipv6Prefix prefix) {
- return IetfInetUtil.INSTANCE.ipv6PrefixToBytes(prefix);
+ return IetfInetUtil.ipv6PrefixToBytes(prefix);
}
/**
*/
public static Ipv6Prefix prefixForBytes(final byte[] bytes, final int length) {
checkArgument(length <= bytes.length * Byte.SIZE);
-
- final byte[] tmp;
- if (bytes.length != IPV6_LENGTH) {
- tmp = Arrays.copyOfRange(bytes, 0, IPV6_LENGTH);
- } else {
- tmp = bytes;
- }
-
- return IetfInetUtil.INSTANCE.ipv6PrefixFor(tmp, length);
+ return IetfInetUtil.ipv6PrefixFor(
+ bytes.length == IPV6_LENGTH ? bytes : Arrays.copyOfRange(bytes, 0, IPV6_LENGTH), length);
}
/**
*/
public static Ipv6Prefix prefixForByteBuf(final ByteBuf buf) {
final int prefixLength = buf.readUnsignedByte();
- final int size = prefixLength / Byte.SIZE + (prefixLength % Byte.SIZE == 0 ? 0 : 1);
+ final int size = Ipv4Util.prefixBitsToBytes(prefixLength);
final int readable = buf.readableBytes();
checkArgument(size <= readable, "Illegal length of IP prefix: %s/%s", size, readable);
final byte[] bytes = new byte[IPV6_LENGTH];
buf.readBytes(bytes, 0, size);
- return IetfInetUtil.INSTANCE.ipv6PrefixFor(bytes, prefixLength);
+ return IetfInetUtil.ipv6PrefixFor(bytes, prefixLength);
}
/**
*/
public static List<Ipv6Prefix> prefixListForBytes(final byte[] bytes) {
if (bytes.length == 0) {
- return Collections.emptyList();
+ return List.of();
}
- final List<Ipv6Prefix> list = new ArrayList<>();
+ final var list = new ArrayList<Ipv6Prefix>();
int byteOffset = 0;
while (byteOffset < bytes.length) {
final int bitLength = Byte.toUnsignedInt(bytes[byteOffset]);
list.add(EMPTY_PREFIX);
continue;
}
- list.add(IetfInetUtil.INSTANCE.ipv6PrefixForShort(bytes, byteOffset, bitLength));
+ list.add(IetfInetUtil.ipv6PrefixForShort(bytes, byteOffset, bitLength));
byteOffset += bitLength / Byte.SIZE;
if (bitLength % Byte.SIZE != 0) {
byteOffset++;
*/
public static void writeIpv6Address(final Ipv6AddressNoZone ipv6Address, final ByteBuf output) {
if (ipv6Address != null) {
- output.writeBytes(IetfInetUtil.INSTANCE.ipv6AddressNoZoneBytes(ipv6Address));
+ output.writeBytes(IetfInetUtil.ipv6AddressNoZoneBytes(ipv6Address));
} else {
output.writeZero(IPV6_LENGTH);
}
}
public static void writeMinimalPrefix(final Ipv6Prefix ipv6Prefix, final ByteBuf output) {
- final byte[] bytes = IetfInetUtil.INSTANCE.ipv6PrefixToBytes(ipv6Prefix);
+ final var bytes = IetfInetUtil.ipv6PrefixToBytes(ipv6Prefix);
Ipv4Util.writeMinimalPrefix(output, bytes, bytes[IPV6_LENGTH]);
}
}