X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=bgp%2Fopenconfig-state%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fbgp%2Fstate%2FNeighborUtil.java;h=f78c9e2f292509d22e6456f5630c431792f188cd;hb=8896ea0a68188dba41c89d23be96ccc15e60c546;hp=7ed5d40e6ff4b3bb06097d45c063b3f25948ab4f;hpb=962b0b9dab61baea3019aaf6ddff0fd5fe84cd72;p=bgpcep.git diff --git a/bgp/openconfig-state/src/main/java/org/opendaylight/protocol/bgp/state/NeighborUtil.java b/bgp/openconfig-state/src/main/java/org/opendaylight/protocol/bgp/state/NeighborUtil.java index 7ed5d40e6f..f78c9e2f29 100644 --- a/bgp/openconfig-state/src/main/java/org/opendaylight/protocol/bgp/state/NeighborUtil.java +++ b/bgp/openconfig-state/src/main/java/org/opendaylight/protocol/bgp/state/NeighborUtil.java @@ -8,22 +8,20 @@ package org.opendaylight.protocol.bgp.state; -import com.google.common.primitives.UnsignedLong; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.util.ArrayList; +import com.google.common.collect.ImmutableSet; +import com.google.common.primitives.UnsignedInteger; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Objects; -import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer; import org.opendaylight.protocol.bgp.rib.spi.state.BGPAfiSafiState; import org.opendaylight.protocol.bgp.rib.spi.state.BGPErrorHandlingState; import org.opendaylight.protocol.bgp.rib.spi.state.BGPGracelfulRestartState; +import org.opendaylight.protocol.bgp.rib.spi.state.BGPLlGracelfulRestartState; import org.opendaylight.protocol.bgp.rib.spi.state.BGPPeerMessagesState; import org.opendaylight.protocol.bgp.rib.spi.state.BGPPeerState; import org.opendaylight.protocol.bgp.rib.spi.state.BGPSessionState; @@ -31,6 +29,7 @@ import org.opendaylight.protocol.bgp.rib.spi.state.BGPTimersState; import org.opendaylight.protocol.bgp.rib.spi.state.BGPTransportState; 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.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafiBuilder; +import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafiKey; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.operational.rev151009.BgpNeighborState.SessionState; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.operational.rev151009.bgp.neighbor.prefix.counters_state.PrefixesBuilder; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.graceful.restart.GracefulRestart; @@ -56,36 +55,43 @@ import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.GRACEFULRESTART; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.MPBGP; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.ROUTEREFRESH; +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.Ipv4AddressNoZone; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Timeticks; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.BgpNeighborStateAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.BgpNeighborStateAugmentationBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborAfiSafiGracefulRestartStateAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborAfiSafiGracefulRestartStateAugmentationBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborAfiSafiStateAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborAfiSafiStateAugmentationBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborErrorHandlingStateAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborErrorHandlingStateAugmentationBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborGracefulRestartStateAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborGracefulRestartStateAugmentationBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborStateAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborStateAugmentationBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborTimersStateAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborTimersStateAugmentationBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborTransportStateAugmentation; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborTransportStateAugmentationBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instances.network.instance.protocols.protocol.bgp.neighbors.neighbor.state.MessagesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instances.network.instance.protocols.protocol.bgp.neighbors.neighbor.state.messages.Received; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instances.network.instance.protocols.protocol.bgp.neighbors.neighbor.state.messages.ReceivedBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instances.network.instance.protocols.protocol.bgp.neighbors.neighbor.state.messages.Sent; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instances.network.instance.protocols.protocol.bgp.neighbors.neighbor.state.messages.SentBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instance.protocol.BgpNeighborStateAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instance.protocol.BgpNeighborStateAugmentationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instance.protocol.NeighborAfiSafiGracefulRestartStateAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instance.protocol.NeighborAfiSafiGracefulRestartStateAugmentationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instance.protocol.NeighborAfiSafiStateAugmentationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instance.protocol.NeighborErrorHandlingStateAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instance.protocol.NeighborErrorHandlingStateAugmentationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instance.protocol.NeighborGracefulRestartStateAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instance.protocol.NeighborGracefulRestartStateAugmentationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instance.protocol.NeighborStateAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instance.protocol.NeighborStateAugmentationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instance.protocol.NeighborTimersStateAugmentationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instance.protocol.NeighborTransportStateAugmentationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instance.protocol.bgp.neighbor_state.augmentation.MessagesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instance.protocol.bgp.neighbor_state.augmentation.messages.Received; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instance.protocol.bgp.neighbor_state.augmentation.messages.ReceivedBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instance.protocol.bgp.neighbor_state.augmentation.messages.Sent; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.network.instance.protocol.bgp.neighbor_state.augmentation.messages.SentBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey; +import org.opendaylight.yangtools.yang.binding.util.BindingMap; +import org.opendaylight.yangtools.yang.common.Decimal64; +import org.opendaylight.yangtools.yang.common.Uint16; +import org.opendaylight.yangtools.yang.common.Uint32; +import org.opendaylight.yangtools.yang.common.Uint64; /** * Util for create OpenConfig Neighbor with corresponding openConfig state. */ public final class NeighborUtil { + private static final long TIMETICK_ROLLOVER_VALUE = UnsignedInteger.MAX_VALUE.longValue() + 1; + private NeighborUtil() { - throw new UnsupportedOperationException(); + // Hidden on purpose } /** @@ -96,16 +102,15 @@ public final class NeighborUtil { * @param bgpTableTypeRegistry BGP TableType Registry * @return Openconfig Neighbors Stats */ - @Nullable - public static Neighbors buildNeighbors(@Nonnull final List peerStats, - @Nonnull final BGPTableTypeRegistryConsumer bgpTableTypeRegistry) { + public static @Nullable Neighbors buildNeighbors(final @NonNull List peerStats, + final @NonNull BGPTableTypeRegistryConsumer bgpTableTypeRegistry) { if (peerStats.isEmpty()) { return null; } return new NeighborsBuilder().setNeighbor(peerStats.stream() .filter(Objects::nonNull) .map(neighbor -> buildNeighbor(neighbor, bgpTableTypeRegistry)) - .collect(Collectors.toList())).build(); + .collect(BindingMap.toMap())).build(); } /** @@ -114,11 +119,10 @@ public final class NeighborUtil { * @param neighbor containing Neighbor state counters * @return neighbor containing Neighbor State */ - @Nullable - public static Neighbor buildNeighbor(@Nonnull final BGPPeerState neighbor, - @Nonnull final BGPTableTypeRegistryConsumer bgpTableTypeRegistry) { + public static @NonNull Neighbor buildNeighbor(final @NonNull BGPPeerState neighbor, + final @NonNull BGPTableTypeRegistryConsumer bgpTableTypeRegistry) { return new NeighborBuilder() - .setNeighborAddress(neighbor.getNeighborAddress()) + .setNeighborAddress(convertIpAddress(neighbor.getNeighborAddress())) .setState(buildNeighborState(neighbor.getBGPSessionState(), neighbor.getBGPPeerMessagesState())) .setTimers(buildTimer(neighbor.getBGPTimersState())) .setTransport(buildTransport(neighbor.getBGPTransportState())) @@ -128,6 +132,17 @@ public final class NeighborUtil { .build(); } + private static IpAddress convertIpAddress(final IpAddressNoZone addr) { + if (addr == null) { + return null; + } + final Ipv4AddressNoZone ipv4 = addr.getIpv4AddressNoZone(); + if (ipv4 != null) { + return new IpAddress(ipv4); + } + return new IpAddress(addr.getIpv6AddressNoZone()); + } + /** * Builds Neighbor State from BGPPeerState counters. * @@ -135,18 +150,17 @@ public final class NeighborUtil { * @param bgpPeerMessagesState message state * @return Neighbor State */ - @Nullable - public static State buildNeighborState(@Nullable final BGPSessionState sessionState, + public static @Nullable State buildNeighborState(final @Nullable BGPSessionState sessionState, final BGPPeerMessagesState bgpPeerMessagesState) { if (sessionState == null && bgpPeerMessagesState == null) { return null; } final StateBuilder builder = new StateBuilder(); if (sessionState != null) { - builder.addAugmentation(NeighborStateAugmentation.class, buildCapabilityState(sessionState)); + builder.addAugmentation(buildCapabilityState(sessionState)); } if (bgpPeerMessagesState != null) { - builder.addAugmentation(BgpNeighborStateAugmentation.class, buildMessageState(bgpPeerMessagesState)); + builder.addAugmentation(buildMessageState(bgpPeerMessagesState)); } return builder.build(); } @@ -157,18 +171,22 @@ public final class NeighborUtil { * @param neighbor BGPPeerState containing Operational state counters * @return Timer State */ - @Nullable - public static Timers buildTimer(@Nullable final BGPTimersState neighbor) { + public static @Nullable Timers buildTimer(final @Nullable BGPTimersState neighbor) { if (neighbor == null) { return null; } - final NeighborTimersStateAugmentation timerState = new NeighborTimersStateAugmentationBuilder() - .setNegotiatedHoldTime(BigDecimal.valueOf(neighbor.getNegotiatedHoldTime())) - .setUptime(new Timeticks(neighbor.getUpTime())).build(); + // convert neighbor uptime which is in milliseconds to time-ticks which is + // hundredth of a second, and handle roll-over scenario + final long uptimeTicks = neighbor.getUpTime() / 10 % TIMETICK_ROLLOVER_VALUE; - return new TimersBuilder().setState(new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp - .neighbor.group.timers.StateBuilder() - .addAugmentation(NeighborTimersStateAugmentation.class, timerState).build()).build(); + return new TimersBuilder() + .setState(new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group + .timers.StateBuilder() + .addAugmentation(new NeighborTimersStateAugmentationBuilder() + .setNegotiatedHoldTime(Decimal64.valueOf(2, neighbor.getNegotiatedHoldTime())) + .setUptime(new Timeticks(Uint32.valueOf(uptimeTicks))).build()) + .build()) + .build(); } /** @@ -177,18 +195,20 @@ public final class NeighborUtil { * @param neighbor BGPPeerState containing Operational state counters * @return Transport State */ - @Nullable - public static Transport buildTransport(@Nullable final BGPTransportState neighbor) { + public static @Nullable Transport buildTransport(final @Nullable BGPTransportState neighbor) { if (neighbor == null) { return null; } - final NeighborTransportStateAugmentation transportState = new NeighborTransportStateAugmentationBuilder() - .setLocalPort(neighbor.getLocalPort()).setRemoteAddress(neighbor.getRemoteAddress()) - .setRemotePort(neighbor.getRemotePort()).build(); return new TransportBuilder().setState(new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009 .bgp.neighbor.group.transport.StateBuilder() - .addAugmentation(NeighborTransportStateAugmentation.class, transportState).build()).build(); + .addAugmentation(new NeighborTransportStateAugmentationBuilder() + .setLocalPort(neighbor.getLocalPort()) + .setRemoteAddress(convertIpAddress(neighbor.getRemoteAddress())) + .setRemotePort(neighbor.getRemotePort()) + .build()) + .build()) + .build(); } /** @@ -197,14 +217,16 @@ public final class NeighborUtil { * @param errorHandlingState BGPErrorHandlingState containing ErrorHandlingState Operational state counters * @return Error Handling State */ - public static ErrorHandling buildErrorHandling(@Nullable final BGPErrorHandlingState errorHandlingState) { + public static ErrorHandling buildErrorHandling(final @Nullable BGPErrorHandlingState errorHandlingState) { if (errorHandlingState == null) { return null; } - return new ErrorHandlingBuilder().setState(new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp - .rev151009.bgp.neighbor.group.error.handling.StateBuilder() - .addAugmentation(NeighborErrorHandlingStateAugmentation.class, - buildErrorHandlingState(errorHandlingState.getErroneousUpdateReceivedCount())).build()).build(); + return new ErrorHandlingBuilder() + .setState(new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group + .error.handling.StateBuilder() + .addAugmentation(buildErrorHandlingState(errorHandlingState.getErroneousUpdateReceivedCount())) + .build()) + .build(); } /** @@ -213,18 +235,17 @@ public final class NeighborUtil { * @param neighbor BGPPeerState containing Operational state counters * @return Graceful Restart */ - @Nonnull - public static GracefulRestart buildGracefulRestart(@Nonnull final BGPGracelfulRestartState neighbor) { + public static @NonNull GracefulRestart buildGracefulRestart(final @NonNull BGPGracelfulRestartState neighbor) { final NeighborGracefulRestartStateAugmentation gracefulRestartState = new NeighborGracefulRestartStateAugmentationBuilder() .setLocalRestarting(neighbor.isLocalRestarting()) - .setPeerRestartTime(neighbor.getPeerRestartTime()) - //.setMode(mode) TBD once implemented + .setPeerRestartTime(Uint16.valueOf(neighbor.getPeerRestartTime())) + .setMode(neighbor.getMode()) .setPeerRestarting(neighbor.isPeerRestarting()).build(); return new GracefulRestartBuilder().setState(new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp .rev151009.bgp.graceful.restart.graceful.restart.StateBuilder() - .addAugmentation(NeighborGracefulRestartStateAugmentation.class, gracefulRestartState).build()).build(); + .addAugmentation(gracefulRestartState).build()).build(); } /** @@ -233,8 +254,8 @@ public final class NeighborUtil { * @param neighbor BGPPeerState containing Operational state counters * @return Afi Safis */ - public static AfiSafis buildAfisSafis(@Nonnull final BGPPeerState neighbor, - @Nonnull final BGPTableTypeRegistryConsumer bgpTableTypeRegistry) { + public static AfiSafis buildAfisSafis(final @NonNull BGPPeerState neighbor, + final @NonNull BGPTableTypeRegistryConsumer bgpTableTypeRegistry) { return new AfiSafisBuilder().setAfiSafi(buildAfisSafisState(neighbor.getBGPAfiSafiState(), bgpTableTypeRegistry)).build(); } @@ -244,9 +265,9 @@ public final class NeighborUtil { * * @return Neighbor State */ - public static NeighborStateAugmentation buildCapabilityState(@Nonnull final BGPSessionState neighbor) { + public static NeighborStateAugmentation buildCapabilityState(final @NonNull BGPSessionState neighbor) { - final List> supportedCapabilities = buildSupportedCapabilities(neighbor); + final Set supportedCapabilities = buildSupportedCapabilities(neighbor); SessionState sessionState = null; switch (neighbor.getSessionState()) { case IDLE: @@ -269,29 +290,25 @@ public final class NeighborUtil { * * @return BgpNeighborState containing Message State */ - @Nonnull - public static BgpNeighborStateAugmentation buildMessageState(@Nonnull final BGPPeerMessagesState neighbor) { + public static @NonNull BgpNeighborStateAugmentation buildMessageState( + final @NonNull BGPPeerMessagesState neighbor) { return new BgpNeighborStateAugmentationBuilder() .setMessages(new MessagesBuilder() .setReceived(buildMessagesReceived(neighbor)) .setSent(buildMessagesSent(neighbor)).build()).build(); } - private static Received buildMessagesReceived(@Nonnull final BGPPeerMessagesState neighbor) { + private static Received buildMessagesReceived(final @NonNull BGPPeerMessagesState neighbor) { return new ReceivedBuilder() - .setUPDATE(toBigInteger(neighbor.getUpdateMessagesReceivedCount())) - .setNOTIFICATION(toBigInteger(neighbor.getNotificationMessagesReceivedCount())) + .setUPDATE(Uint64.valueOf(neighbor.getUpdateMessagesReceivedCount())) + .setNOTIFICATION(Uint64.valueOf(neighbor.getNotificationMessagesReceivedCount())) .build(); } - public static BigInteger toBigInteger(final long updateReceivedCounter) { - return UnsignedLong.valueOf(updateReceivedCounter).bigIntegerValue(); - } - - private static Sent buildMessagesSent(@Nonnull final BGPPeerMessagesState neighbor) { + private static Sent buildMessagesSent(final @NonNull BGPPeerMessagesState neighbor) { return new SentBuilder() - .setUPDATE(toBigInteger(neighbor.getUpdateMessagesSentCount())) - .setNOTIFICATION(toBigInteger(neighbor.getNotificationMessagesSentCount())) + .setUPDATE(Uint64.valueOf(neighbor.getUpdateMessagesSentCount())) + .setNOTIFICATION(Uint64.valueOf(neighbor.getNotificationMessagesSentCount())) .build(); } @@ -301,10 +318,10 @@ public final class NeighborUtil { * @param erroneousUpdateCount erroneous Update Count * @return Error Handling State */ - @Nonnull - public static NeighborErrorHandlingStateAugmentation buildErrorHandlingState(final long erroneousUpdateCount) { + public static @NonNull NeighborErrorHandlingStateAugmentation buildErrorHandlingState( + final long erroneousUpdateCount) { return new NeighborErrorHandlingStateAugmentationBuilder() - .setErroneousUpdateMessages(erroneousUpdateCount).build(); + .setErroneousUpdateMessages(saturatedUint32(erroneousUpdateCount)).build(); } /** @@ -312,55 +329,59 @@ public final class NeighborUtil { * * @return AfiSafi List */ - @Nonnull - public static List buildAfisSafisState(@Nonnull final BGPAfiSafiState neighbor, - @Nonnull final BGPTableTypeRegistryConsumer bgpTableTypeRegistry) { + public static @NonNull Map buildAfisSafisState(final @NonNull BGPAfiSafiState neighbor, + final @NonNull BGPTableTypeRegistryConsumer bgpTableTypeRegistry) { final Set afiSafiJoin = new HashSet<>(neighbor.getAfiSafisAdvertized()); afiSafiJoin.addAll(neighbor.getAfiSafisReceived()); return afiSafiJoin.stream().map(tableKey -> buildAfiSafi(neighbor, tableKey, bgpTableTypeRegistry)) .filter(Objects::nonNull) - .collect(Collectors.toList()); + .collect(BindingMap.toMap()); } - private static AfiSafi buildAfiSafi(@Nonnull final BGPAfiSafiState neighbor, - @Nonnull final TablesKey tablesKey, @Nonnull final BGPTableTypeRegistryConsumer bgpTableTypeRegistry) { - final Optional> afiSafi = bgpTableTypeRegistry.getAfiSafiType(tablesKey); - if (!afiSafi.isPresent()) { - return null; - } - - return new AfiSafiBuilder().setAfiSafiName(afiSafi.get()) - .setState(buildAfiSafiState(neighbor, tablesKey, neighbor.isAfiSafiSupported(tablesKey))) - .setGracefulRestart(buildAfiSafiGracefulRestartState(neighbor, tablesKey)).build(); + private static @Nullable AfiSafi buildAfiSafi(final @NonNull BGPAfiSafiState neighbor, + final @NonNull TablesKey tablesKey, final @NonNull BGPTableTypeRegistryConsumer bgpTableTypeRegistry) { + final AfiSafiType afiSafi = bgpTableTypeRegistry.getAfiSafiType(tablesKey); + return afiSafi == null ? null : new AfiSafiBuilder() + .setAfiSafiName(afiSafi) + .setState(buildAfiSafiState(neighbor, tablesKey, neighbor.isAfiSafiSupported(tablesKey))) + .setGracefulRestart(buildAfiSafiGracefulRestartState(neighbor, tablesKey)) + .build(); } private static org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi - .safi.list.afi.safi.State buildAfiSafiState(@Nonnull final BGPAfiSafiState neighbor, - @Nonnull final TablesKey tablesKey, final boolean afiSafiSupported) { + .safi.list.afi.safi.State buildAfiSafiState(final @NonNull BGPAfiSafiState neighbor, + final @NonNull TablesKey tablesKey, final boolean afiSafiSupported) { final NeighborAfiSafiStateAugmentationBuilder builder = new NeighborAfiSafiStateAugmentationBuilder(); builder.setActive(afiSafiSupported); if (afiSafiSupported) { builder.setPrefixes(new PrefixesBuilder() - .setInstalled(neighbor.getPrefixesInstalledCount(tablesKey)) - .setReceived(neighbor.getPrefixesReceivedCount(tablesKey)) - .setSent(neighbor.getPrefixesSentCount(tablesKey)).build()); + .setInstalled(saturatedUint32(neighbor.getPrefixesInstalledCount(tablesKey))) + .setReceived(saturatedUint32(neighbor.getPrefixesReceivedCount(tablesKey))) + .setSent(saturatedUint32(neighbor.getPrefixesSentCount(tablesKey))).build()); } return new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi - .safi.list.afi.safi.StateBuilder().addAugmentation(NeighborAfiSafiStateAugmentation.class, - builder.build()).build(); + .safi.list.afi.safi.StateBuilder().addAugmentation(builder.build()).build(); + } + + // FIXME: remove this with YANGTOOLS-5.0.7+ + private static Uint32 saturatedUint32(final long value) { + return value < 4294967295L ? Uint32.valueOf(value) : Uint32.MAX_VALUE; } private static org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi .safi.list.afi.safi.GracefulRestart buildAfiSafiGracefulRestartState( - @Nonnull final BGPGracelfulRestartState neighbor, @Nonnull final TablesKey tablesKey) { + final @NonNull BGPLlGracelfulRestartState neighbor, final @NonNull TablesKey tablesKey) { final NeighborAfiSafiGracefulRestartStateAugmentation builder = new NeighborAfiSafiGracefulRestartStateAugmentationBuilder() .setAdvertised(neighbor.isGracefulRestartAdvertized(tablesKey)) - .setReceived(neighbor.isGracefulRestartReceived(tablesKey)).build(); + .setReceived(neighbor.isGracefulRestartReceived(tablesKey)) + .setLlAdvertised(neighbor.isLlGracefulRestartAdvertised(tablesKey)) + .setLlReceived(neighbor.isLlGracefulRestartReceived(tablesKey)) + .setLlStaleTimer(Uint32.valueOf(neighbor.getLlGracefulRestartTimer(tablesKey))).build(); return new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi .safi.list.afi.safi.GracefulRestartBuilder().setState(new org.opendaylight.yang.gen.v1.http.openconfig .net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.afi.safi.graceful.restart.StateBuilder() - .addAugmentation(NeighborAfiSafiGracefulRestartStateAugmentation.class, builder).build()).build(); + .addAugmentation(builder).build()).build(); } /** @@ -368,25 +389,23 @@ public final class NeighborUtil { * * @return List containing supported capabilities */ - @Nonnull - public static List> buildSupportedCapabilities( - @Nonnull final BGPSessionState neighbor) { - final List> supportedCapabilities = new ArrayList<>(); + public static @NonNull Set buildSupportedCapabilities(final @NonNull BGPSessionState neighbor) { + final var supportedCapabilities = ImmutableSet.builder(); if (neighbor.isAddPathCapabilitySupported()) { - supportedCapabilities.add(ADDPATHS.class); + supportedCapabilities.add(ADDPATHS.VALUE); } if (neighbor.isAsn32CapabilitySupported()) { - supportedCapabilities.add(ASN32.class); + supportedCapabilities.add(ASN32.VALUE); } if (neighbor.isGracefulRestartCapabilitySupported()) { - supportedCapabilities.add(GRACEFULRESTART.class); + supportedCapabilities.add(GRACEFULRESTART.VALUE); } if (neighbor.isMultiProtocolCapabilitySupported()) { - supportedCapabilities.add(MPBGP.class); + supportedCapabilities.add(MPBGP.VALUE); } if (neighbor.isRouterRefreshCapabilitySupported()) { - supportedCapabilities.add(ROUTEREFRESH.class); + supportedCapabilities.add(ROUTEREFRESH.VALUE); } - return supportedCapabilities; + return supportedCapabilities.build(); } }