From bc62bc6768bc8f91f929f61d1736331eef0f32b3 Mon Sep 17 00:00:00 2001 From: "Claudio D. Gasparini" Date: Tue, 3 Apr 2018 09:53:26 +0200 Subject: [PATCH] =?utf8?q?BGPCEP-576:=20Neighbor=E2=80=99s=20local=20addre?= =?utf8?q?ss=20configurable?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Change-Id: Ic4aaf8dbb408e37a0df40e320793dc1330879b06 Signed-off-by: Claudio D. Gasparini --- .../bgp/rib/impl/BGPDispatcherImpl.java | 27 ++++++++----------- .../protocol/bgp/rib/impl/config/BgpPeer.java | 18 ++++++++----- .../impl/config/OpenConfigMappingUtil.java | 13 +++++++++ .../bgp/rib/impl/spi/BGPDispatcher.java | 9 ++++++- .../bgp/rib/impl/ParserToSalTest.java | 6 +++-- .../bgp/rib/impl/config/AbstractConfig.java | 4 +-- .../bgp/rib/impl/config/BgpPeerTest.java | 27 ++++++++++--------- .../config/OpenConfigMappingUtilTest.java | 22 +++++++++++---- 8 files changed, 81 insertions(+), 45 deletions(-) diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPDispatcherImpl.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPDispatcherImpl.java index a35bd0a023..5ac92300d8 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPDispatcherImpl.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPDispatcherImpl.java @@ -76,8 +76,10 @@ public class BGPDispatcherImpl implements BGPDispatcher, AutoCloseable { this.handlerFactory = new BGPHandlerFactory(messageRegistry); } - private synchronized Future createClient(final InetSocketAddress remoteAddress, - final int retryTimer, final Bootstrap clientBootStrap) { + @VisibleForTesting + public synchronized Future createClient(final InetSocketAddress localAddress, + final InetSocketAddress remoteAddress, final int retryTimer, final boolean reuseAddress) { + final Bootstrap clientBootStrap = createClientBootStrap(KeyMapping.getKeyMapping(), reuseAddress, localAddress); final BGPClientSessionNegotiatorFactory snf = new BGPClientSessionNegotiatorFactory(this.bgpPeerRegistry); final ChannelPipelineInitializer initializer = BGPChannel.createChannelPipelineInitializer( this.handlerFactory, snf); @@ -90,15 +92,8 @@ public class BGPDispatcherImpl implements BGPDispatcher, AutoCloseable { return sessionPromise; } - @VisibleForTesting - public synchronized Future createClient(final InetSocketAddress localAddress, - final InetSocketAddress remoteAddress, final int retryTimer, final boolean reuseAddress) { - final Bootstrap clientBootStrap = createClientBootStrap(KeyMapping.getKeyMapping(), reuseAddress); - clientBootStrap.localAddress(localAddress); - return createClient(remoteAddress, retryTimer, clientBootStrap); - } - - private synchronized Bootstrap createClientBootStrap(final KeyMapping keys, final boolean reuseAddress) { + private synchronized Bootstrap createClientBootStrap(final KeyMapping keys, final boolean reuseAddress, + final InetSocketAddress localAddress) { final Bootstrap bootstrap = new Bootstrap(); if (Epoll.isAvailable()) { bootstrap.channel(EpollSocketChannel.class); @@ -123,12 +118,13 @@ public class BGPDispatcherImpl implements BGPDispatcher, AutoCloseable { if (bootstrap.config().group() == null) { bootstrap.group(this.workerGroup); } + bootstrap.localAddress(localAddress); return bootstrap; } @Override - public synchronized void close() throws InterruptedException { + public synchronized void close() { if (Epoll.isAvailable()) { LOG.debug("Closing Dispatcher"); this.workerGroup.shutdownGracefully(0, TIMEOUT, TimeUnit.SECONDS); @@ -138,8 +134,8 @@ public class BGPDispatcherImpl implements BGPDispatcher, AutoCloseable { @Override public synchronized Future createReconnectingClient(final InetSocketAddress remoteAddress, - final int retryTimer, final KeyMapping keys) { - return createReconnectingClient(remoteAddress, retryTimer, keys, null, false); + final InetSocketAddress localAddress, final int retryTimer, final KeyMapping keys) { + return createReconnectingClient(remoteAddress, retryTimer, keys, localAddress, false); } @VisibleForTesting @@ -147,8 +143,7 @@ public class BGPDispatcherImpl implements BGPDispatcher, AutoCloseable { final int retryTimer, final KeyMapping keys, final InetSocketAddress localAddress, final boolean reuseAddress) { final BGPClientSessionNegotiatorFactory snf = new BGPClientSessionNegotiatorFactory(this.bgpPeerRegistry); - final Bootstrap bootstrap = createClientBootStrap(keys, reuseAddress); - bootstrap.localAddress(localAddress); + final Bootstrap bootstrap = createClientBootStrap(keys, reuseAddress, localAddress); final BGPReconnectPromise reconnectPromise = new BGPReconnectPromise<>(GlobalEventExecutor.INSTANCE, remoteAddress, retryTimer, bootstrap, this.bgpPeerRegistry, BGPChannel.createChannelPipelineInitializer(this.handlerFactory, snf)); diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeer.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeer.java index 3189e6f7ef..fe4beb7b64 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeer.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeer.java @@ -9,7 +9,6 @@ package org.opendaylight.protocol.bgp.rib.impl.config; import static java.util.Objects.requireNonNull; -import static org.opendaylight.protocol.bgp.rib.impl.config.OpenConfigMappingUtil.getGlobalClusterIdentifier; import com.google.common.base.Preconditions; import com.google.common.collect.Iterables; @@ -46,6 +45,7 @@ import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.p import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.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.IpAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev171207.open.message.BgpParameters; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev171207.open.message.BgpParametersBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev171207.open.message.bgp.parameters.OptionalCapabilities; @@ -221,6 +221,7 @@ public final class BgpPeer implements PeerBean, BGPPeerStateConsumer { private final InetSocketAddress inetAddress; private final int retryTimer; private final KeyMapping keys; + private final InetSocketAddress localAddress; private final BGPPeer bgpPeer; private final IpAddress neighborAddress; private final BGPSessionPreferences prefs; @@ -260,7 +261,7 @@ public final class BgpPeer implements PeerBean, BGPPeerStateConsumer { final List bgpParameters = getBgpParameters(afisSAfis, rib, tableTypeRegistry); final KeyMapping keyMapping = OpenConfigMappingUtil.getNeighborKey(neighbor); - + final IpAddress neighborLocalAddress = OpenConfigMappingUtil.getLocalAddress(neighbor.getTransport()); int hold = OpenConfigMappingUtil.getHoldTimer(neighbor, peerGroup); final AsNumber ribAs = rib.getLocalAs(); final AsNumber neighborAs = OpenConfigMappingUtil.getPeerAs(neighbor, peerGroup, ribAs); @@ -271,8 +272,13 @@ public final class BgpPeer implements PeerBean, BGPPeerStateConsumer { this.retryTimer = OpenConfigMappingUtil.getRetryTimer(neighbor, peerGroup); this.dispatcher = rib.getDispatcher(); - this.inetAddress = Ipv4Util.toInetSocketAddress(this.neighborAddress, - OpenConfigMappingUtil.getPort(neighbor, peerGroup)); + final PortNumber port = OpenConfigMappingUtil.getPort(neighbor, peerGroup); + this.inetAddress = Ipv4Util.toInetSocketAddress(this.neighborAddress, port); + if (neighborLocalAddress != null) { + this.localAddress = Ipv4Util.toInetSocketAddress(neighborLocalAddress, port); + } else { + this.localAddress = null; + } this.keys = keyMapping; } @@ -282,8 +288,8 @@ public final class BgpPeer implements PeerBean, BGPPeerStateConsumer { this.bgpPeer.instantiateServiceInstance(); this.dispatcher.getBGPPeerRegistry().addPeer(this.neighborAddress, this.bgpPeer, this.prefs); if (this.activeConnection) { - this.connection = this.dispatcher.createReconnectingClient(this.inetAddress, this.retryTimer, - this.keys); + this.connection = this.dispatcher.createReconnectingClient(this.inetAddress, this.localAddress, + this.retryTimer, this.keys); } } diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/OpenConfigMappingUtil.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/OpenConfigMappingUtil.java index d4bd0f6c41..30ccb2ec56 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/OpenConfigMappingUtil.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/OpenConfigMappingUtil.java @@ -33,6 +33,7 @@ import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.r 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.rev151009.BgpNeighborAddPathsConfig; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.BgpNeighborGroup; +import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.BgpNeighborTransportConfig; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.RouteReflector; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Timers; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Transport; @@ -46,6 +47,7 @@ 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.PeerType; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.protocols.Protocol; 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.IpAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev171207.BgpTableType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev171207.SendReceive; @@ -411,4 +413,15 @@ public final class OpenConfigMappingUtil { return port; } + + @Nullable + public static IpAddress getLocalAddress(@Nullable final Transport transport) { + if (transport != null && transport.getConfig() != null) { + final BgpNeighborTransportConfig.LocalAddress localAddress = transport.getConfig().getLocalAddress(); + if (localAddress != null ) { + return localAddress.getIpAddress(); + } + } + return null; + } } diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/spi/BGPDispatcher.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/spi/BGPDispatcher.java index 03713c5776..566c7490e2 100755 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/spi/BGPDispatcher.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/spi/BGPDispatcher.java @@ -10,6 +10,8 @@ package org.opendaylight.protocol.bgp.rib.impl.spi; import io.netty.channel.ChannelFuture; import io.netty.util.concurrent.Future; import java.net.InetSocketAddress; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.opendaylight.protocol.concepts.KeyMapping; /** @@ -20,11 +22,14 @@ public interface BGPDispatcher { * Creates Reconnecting client. * * @param remoteAddress remote Peer Address + * @param localAddress local Peer address * @param retryTimer Retry timer * @param keys for TCPMD5 * @return Future promising a client session */ - Future createReconnectingClient(InetSocketAddress remoteAddress, int retryTimer, KeyMapping keys); + @Nonnull + Future createReconnectingClient(@Nonnull InetSocketAddress remoteAddress, + @Nullable InetSocketAddress localAddress, int retryTimer, @Nonnull KeyMapping keys); /** * Create new BGP server to accept incoming bgp connections (bound to provided socket localAddress). @@ -32,6 +37,7 @@ public interface BGPDispatcher { * @param localAddress Peer localAddress * @return ChannelFuture promising a client session */ + @Nonnull ChannelFuture createServer(InetSocketAddress localAddress); /** @@ -39,5 +45,6 @@ public interface BGPDispatcher { * * @return BGPPeerRegistry */ + @Nonnull BGPPeerRegistry getBGPPeerRegistry(); } diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/ParserToSalTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/ParserToSalTest.java index b80998dfa9..1dafdbc8b4 100755 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/ParserToSalTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/ParserToSalTest.java @@ -9,6 +9,8 @@ package org.opendaylight.protocol.bgp.rib.impl; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyInt; import static org.opendaylight.protocol.bgp.rib.impl.AbstractAddPathTest.AS_NUMBER; import static org.opendaylight.protocol.bgp.rib.impl.AbstractAddPathTest.BGP_ID; import static org.opendaylight.protocol.util.CheckUtil.readDataOperational; @@ -83,8 +85,8 @@ public class ParserToSalTest extends DefaultRibPoliciesMockTest { .getSingletonInstance().getMessageRegistry(), Lists.newArrayList(fixMessages(bgpMessages))); Mockito.doReturn(GlobalEventExecutor.INSTANCE.newSucceededFuture(null)).when(this.dispatcher) - .createReconnectingClient(Mockito.any(InetSocketAddress.class), Mockito.anyInt(), - Mockito.any(KeyMapping.class)); + .createReconnectingClient(any(InetSocketAddress.class), any(InetSocketAddress.class), + anyInt(), any(KeyMapping.class)); this.ext1 = new SimpleRIBExtensionProviderContext(); this.ext2 = new SimpleRIBExtensionProviderContext(); diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/AbstractConfig.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/AbstractConfig.java index 44376e7afe..30875e2583 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/AbstractConfig.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/AbstractConfig.java @@ -126,8 +126,8 @@ class AbstractConfig extends DefaultRibPoliciesMockTest { doReturn(this.listener).when(this.dataTreeChangeService).registerDataTreeChangeListener(any(), any()); doReturn(new BgpId("127.0.0.1")).when(this.rib).getBgpIdentifier(); doReturn(true).when(this.future).cancel(true); - doReturn(this.future).when(this.dispatcher) - .createReconnectingClient(any(InetSocketAddress.class), anyInt(), any(KeyMapping.class)); + doReturn(this.future).when(this.dispatcher).createReconnectingClient(any(InetSocketAddress.class), + any(InetSocketAddress.class), anyInt(), any(KeyMapping.class)); doReturn(this.dispatcher).when(this.rib).getDispatcher(); doReturn(java.util.Optional.of(new BgpTableTypeImpl(Ipv4AddressFamily.class, diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeerTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeerTest.java index c5b9fc3be0..8de2f98784 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeerTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeerTest.java @@ -15,6 +15,7 @@ import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; import java.math.BigDecimal; import java.net.InetSocketAddress; @@ -133,14 +134,14 @@ public class BgpPeerTest extends AbstractConfig { .setTransport(createTransport()).setAddPaths(createAddPath()).build(); this.bgpPeer.start(this.rib, neighbor, null, this.peerGroupLoader, this.tableTypeRegistry); - Mockito.verify(this.rib).createPeerDOMChain(any()); - Mockito.verify(this.rib, times(2)).getLocalAs(); - Mockito.verify(this.rib).getLocalTables(); + verify(this.rib).createPeerDOMChain(any()); + verify(this.rib, times(2)).getLocalAs(); + verify(this.rib).getLocalTables(); this.bgpPeer.instantiateServiceInstance(); - Mockito.verify(this.bgpPeerRegistry).addPeer(any(), any(), any()); - Mockito.verify(this.dispatcher).createReconnectingClient(any(InetSocketAddress.class), - anyInt(), any(KeyMapping.class)); + verify(this.bgpPeerRegistry).addPeer(any(), any(), any()); + verify(this.dispatcher).createReconnectingClient(any(InetSocketAddress.class), + any(InetSocketAddress.class), anyInt(), any(KeyMapping.class)); try { this.bgpPeer.start(this.rib, neighbor, null, this.peerGroupLoader, this.tableTypeRegistry); @@ -151,24 +152,24 @@ public class BgpPeerTest extends AbstractConfig { this.bgpPeer.setServiceRegistration(this.serviceRegistration); this.bgpPeer.closeServiceInstance(); this.bgpPeer.close(); - Mockito.verify(this.future).cancel(true); + verify(this.future).cancel(true); this.bgpPeer.restart(this.rib, null, this.peerGroupLoader, this.tableTypeRegistry); this.bgpPeer.instantiateServiceInstance(); - Mockito.verify(this.rib, times(2)).createPeerDOMChain(any()); - Mockito.verify(this.rib, times(4)).getLocalAs(); - Mockito.verify(this.rib, times(2)).getLocalTables(); + verify(this.rib, times(2)).createPeerDOMChain(any()); + verify(this.rib, times(4)).getLocalAs(); + verify(this.rib, times(2)).getLocalTables(); final Neighbor neighborExpected = createNeighborExpected(NEIGHBOR_ADDRESS); assertTrue(this.bgpPeer.containsEqualConfiguration(neighborExpected)); assertFalse(this.bgpPeer.containsEqualConfiguration(createNeighborExpected( new IpAddress(new Ipv4Address("127.0.0.2"))))); - Mockito.verify(this.bgpPeerRegistry).removePeer(any(IpAddress.class)); + verify(this.bgpPeerRegistry).removePeer(any(IpAddress.class)); this.bgpPeer.closeServiceInstance(); this.bgpPeer.close(); - Mockito.verify(this.serviceRegistration).unregister(); - Mockito.verify(this.future, times(2)).cancel(true); + verify(this.serviceRegistration).unregister(); + verify(this.future, times(2)).cancel(true); final Neighbor neighborDiffConfig = new NeighborBuilder().setNeighborAddress(NEIGHBOR_ADDRESS) .setAfiSafis(createAfiSafi()).build(); diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/OpenConfigMappingUtilTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/OpenConfigMappingUtilTest.java index c11358a266..673136b873 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/OpenConfigMappingUtilTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/OpenConfigMappingUtilTest.java @@ -48,6 +48,7 @@ import org.opendaylight.protocol.bgp.rib.impl.spi.RIB; import org.opendaylight.protocol.bgp.rib.spi.BGPPeerTracker; 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.rev151009.BgpNeighborTransportConfig; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.AfiSafis; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.AfiSafisBuilder; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.ConfigBuilder; @@ -75,6 +76,7 @@ import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.re 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.IpAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev171207.BgpTableType; @@ -97,8 +99,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.open import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180321.PeerGroupTransportConfig; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180321.PeerGroupTransportConfigBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev171207.PeerRole; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev171207.rib.TablesKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.BgpId; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv4AddressFamily; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv6AddressFamily; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.MplsLabeledVpnSubsequentAddressFamily; @@ -115,6 +115,7 @@ public class OpenConfigMappingUtilTest { private static final NeighborKey NEIGHBOR_KEY = new NeighborKey(NEIGHBOR_ADDRESS); private static final Ipv4Address ROUTER_ID = new Ipv4Address("1.2.3.4"); private static final Ipv4Address CLUSTER_ID = new Ipv4Address("4.3.2.1"); + private static final Ipv4Address LOCAL_HOST = new Ipv4Address("127.0.0.1"); private static final Long ALL_PATHS = 0L; private static final Long N_PATHS = 2L; @@ -126,11 +127,8 @@ public class OpenConfigMappingUtilTest { UnicastSubsequentAddressFamily.class); private static final BgpTableType BGP_TABLE_TYPE_IPV6 = new BgpTableTypeImpl(Ipv6AddressFamily.class, UnicastSubsequentAddressFamily.class); - private static final AfiSafi AFISAFI_IPV4 = new AfiSafiBuilder().setAfiSafiName(IPV4UNICAST.class).build(); - private static final TablesKey K4 = new TablesKey(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class); private static final AsNumber AS = new AsNumber(72L); - private static final BgpId BGP_ID = new BgpId(NEIGHBOR_ADDRESS.getIpv4Address()); private static final List FAMILIES; private static final List TABLE_TYPES; private static final List AFISAFIS = new ArrayList<>(); @@ -298,6 +296,20 @@ public class OpenConfigMappingUtilTest { .setTransport(transport.setConfig(portConfigGroup).build()).build())); } + @Test + public void testGetLocalAddress() { + assertNull(OpenConfigMappingUtil.getLocalAddress(null)); + final TransportBuilder transport = new TransportBuilder(); + assertNull(OpenConfigMappingUtil.getLocalAddress(transport.build())); + assertNull(OpenConfigMappingUtil.getLocalAddress(transport.setConfig( + new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.transport + .ConfigBuilder().build()).build())); + assertEquals(new IpAddress(LOCAL_HOST), OpenConfigMappingUtil.getLocalAddress(transport.setConfig( + new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.transport + .ConfigBuilder().setLocalAddress(new BgpNeighborTransportConfig + .LocalAddress(new IpAddress(new Ipv4Address(LOCAL_HOST.getValue())))).build()).build())); + } + @Test public void testGetAfiSafiWithDefault() { final ImmutableList defaultValue -- 2.36.6