X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=bgp%2Frib-mock%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fbgp%2Frib%2Fmock%2FEventBusRegistration.java;h=b9b219653ce78d5fa12b7370958854f0875ab655;hb=2af780b03b67c62c53047f3d24f93fbf1d3afcc1;hp=e6ef2091fdec9d55679e8b488ac79948f7378922;hpb=ca152f8991ea7b3a304eadc0cccab73632e15370;p=bgpcep.git diff --git a/bgp/rib-mock/src/main/java/org/opendaylight/protocol/bgp/rib/mock/EventBusRegistration.java b/bgp/rib-mock/src/main/java/org/opendaylight/protocol/bgp/rib/mock/EventBusRegistration.java index e6ef2091fd..b9b219653c 100644 --- a/bgp/rib-mock/src/main/java/org/opendaylight/protocol/bgp/rib/mock/EventBusRegistration.java +++ b/bgp/rib-mock/src/main/java/org/opendaylight/protocol/bgp/rib/mock/EventBusRegistration.java @@ -7,23 +7,38 @@ */ package org.opendaylight.protocol.bgp.rib.mock; -import com.google.common.collect.Sets; import com.google.common.eventbus.EventBus; import com.google.common.eventbus.Subscribe; +import io.netty.channel.ChannelHandlerContext; +import io.netty.util.concurrent.ScheduledFuture; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.concurrent.TimeUnit; +import org.opendaylight.protocol.bgp.parser.BGPDocumentedException; +import org.opendaylight.protocol.bgp.parser.BGPError; import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl; +import org.opendaylight.protocol.bgp.parser.spi.PeerConstraint; import org.opendaylight.protocol.bgp.rib.spi.BGPSession; import org.opendaylight.protocol.bgp.rib.spi.BGPSessionListener; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.Keepalive; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.Open; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.BgpParameters; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.BgpTableType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.c.parameters.MultiprotocolCase; +import org.opendaylight.protocol.bgp.rib.spi.BGPTerminationReason; +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.Ipv4Address; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.Keepalive; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.Open; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.open.message.BgpParameters; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.open.message.bgp.parameters.OptionalCapabilities; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.open.message.bgp.parameters.optional.capabilities.CParameters; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.BgpTableType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.AddPathCapability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.MultiprotocolCapability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.add.path.capability.AddressFamilies; import org.opendaylight.yangtools.concepts.AbstractListenerRegistration; import org.opendaylight.yangtools.yang.binding.Notification; +import org.opendaylight.yangtools.yang.common.Uint32; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,7 +59,8 @@ final class EventBusRegistration extends AbstractListenerRegistration allPreviousMessages) { + private EventBusRegistration(final EventBus eventBus, final BGPSessionListener listener, + final List allPreviousMessages) { super(listener); this.eventBus = eventBus; for (final Notification message : allPreviousMessages) { @@ -64,44 +80,139 @@ final class EventBusRegistration extends AbstractListenerRegistration tts = Sets.newHashSet(); + final Set tts = new HashSet<>(); + final List addPathCapabilitiesList = new ArrayList<>(); for (final BgpParameters param : ((Open) message).getBgpParameters()) { - if (param.getCParameters() instanceof MultiprotocolCase) { - final MultiprotocolCase p = (MultiprotocolCase) param.getCParameters(); - LOG.debug("Adding open parameter {}", p); - final BgpTableType type = new BgpTableTypeImpl(p.getMultiprotocolCapability().getAfi(), p.getMultiprotocolCapability().getSafi()); - tts.add(type); + for (final OptionalCapabilities capa : param.getOptionalCapabilities()) { + final CParameters cParam = capa.getCParameters(); + final CParameters1 aug = cParam.augmentation(CParameters1.class); + if (aug == null) { + continue; + } + if (aug.getMultiprotocolCapability() != null) { + final MultiprotocolCapability p = aug.getMultiprotocolCapability(); + LOG.debug("Adding open parameter {}", p); + final BgpTableType type = new BgpTableTypeImpl(p.getAfi(), p.getSafi()); + tts.add(type); + } else if (aug.getAddPathCapability() != null) { + final AddPathCapability addPathCap = aug.getAddPathCapability(); + addPathCapabilitiesList.addAll(addPathCap.getAddressFamilies()); + } } } + listener.onSessionUp(new MockBGPSession(tts, addPathCapabilitiesList)); + } else if (!(message instanceof Keepalive)) { + try { + listener.onMessage(new MockBGPSession(), message); + } catch (BGPDocumentedException e) { + LOG.warn("Exception encountered while handling message", e); + } + } + } - listener.onSessionUp(new BGPSession() { + private static class MockBGPSession implements BGPSession { + private static final Uint32 AS = Uint32.valueOf(30).intern(); - private static final long AS = 30L; + private final List addPathAfis; + private final Set tts; - @Override - public void close() { - LOG.debug("Session {} closed", this); - } + MockBGPSession(final Set tts, final List addPathAfis) { + this.tts = tts; + this.addPathAfis = addPathAfis; + } - @Override - public Set getAdvertisedTableTypes() { - return tts; - } + MockBGPSession() { + this(Collections.emptySet(), Collections.emptyList()); + } - @Override - public Ipv4Address getBgpId() { - return new Ipv4Address("127.0.0.1"); - } + @Override + public void channelRegistered(final ChannelHandlerContext channelHandlerContext) throws Exception { + } - @Override - public AsNumber getAsNumber() { - return new AsNumber(AS); - } - }); - } else if (!(message instanceof Keepalive)) { - listener.onMessage(null, message); + @Override + public void channelUnregistered(final ChannelHandlerContext channelHandlerContext) throws Exception { + } + + @Override + public void channelActive(final ChannelHandlerContext channelHandlerContext) throws Exception { + } + + @Override + public void channelInactive(final ChannelHandlerContext channelHandlerContext) throws Exception { + } + + @Override + public void channelRead(final ChannelHandlerContext channelHandlerContext, final Object obj) + throws Exception { + } + + @Override + public void channelReadComplete(final ChannelHandlerContext channelHandlerContext) throws Exception { + } + + @Override + public void userEventTriggered(final ChannelHandlerContext channelHandlerContext, final Object obj) + throws Exception { + } + + @Override + public void channelWritabilityChanged(final ChannelHandlerContext channelHandlerContext) throws Exception { + } + + @Override + public void handlerAdded(final ChannelHandlerContext channelHandlerContext) throws Exception { + } + + @Override + public void handlerRemoved(final ChannelHandlerContext channelHandlerContext) throws Exception { + } + + @Override + public void exceptionCaught(final ChannelHandlerContext channelHandlerContext, final Throwable throwable) + throws Exception { + } + + @Override + public void close() { + LOG.debug("Session {} closed", this); + } + + @Override + public Set getAdvertisedTableTypes() { + return tts; + } + + @Override + public Ipv4Address getBgpId() { + return new Ipv4Address("127.0.0.1"); + } + + @Override + public AsNumber getAsNumber() { + return new AsNumber(AS); + } + + @Override + public List getAdvertisedAddPathTableTypes() { + return addPathAfis; + } + + @Override + public void closeWithoutMessage() { + close(); + } + + @Override + public void addDecoderConstraint(final Class constraintClass, + final T constraint) { + // No-op + } + + @Override + public ScheduledFuture schedule(final Runnable command, final long delay, final TimeUnit unit) { + return null; } } }