From 5b242f296eaf7979e08ca55d99cdba803973b85f Mon Sep 17 00:00:00 2001 From: Maros Marsalek Date: Fri, 4 Jul 2014 15:05:06 +0200 Subject: [PATCH] BUG-338 Allow incomming BGP connections. Added BGPPeerRegistry that holds all configured BGP peers. Client/Server SessionNegotiators retrieve BGPPeers(SessionListeners) from the BGPPeerRegistry. Added StrictBGPPeerRegistry (default implementation of BGPPeerRegistry) that allows only 1 session with BGP peer. If second session is being established, the registry drops either already established or new BGP session (depending on higher source BGP ID). Added 2 config attributes to BGPPeer: - initiate connection: true to start BGP connection from ODL. False if just configure BGP peer to accept session from remote device. - peer registry: dependency on BGPPeerRegistry. Peer registers itself into this registry. * new attributes are optional to preserve backwards compatibility. Change-Id: I2f7a606db5196fed49094d49efbb570c4d0fbecb Signed-off-by: Maros Marsalek --- .../src/main/resources/initial/31-bgp.xml | 12 + .../main/resources/initial/41-bgp-example.xml | 23 ++ .../bgp/parser/BGPTerminationReason.java | 8 + .../bgp/rib/impl/BGPPeerAcceptorModule.java | 73 ++++++ .../impl/BGPPeerAcceptorModuleFactory.java | 13 + .../yang/bgp/rib/impl/BGPPeerModule.java | 119 +++++++-- .../rib/impl/StrictBgpPeerRegistryModule.java | 84 +++++++ .../StrictBgpPeerRegistryModuleFactory.java | 14 ++ .../src/main/yang/bgp-rib-impl.yang | 86 +++++++ .../rib/impl/BGPPeerAcceptorModuleTest.java | 179 ++++++++++++++ .../yang/bgp/rib/impl/BGPPeerModuleTest.java | 16 +- ...java => AbstractBGPSessionNegotiator.java} | 110 +++++--- .../bgp/rib/impl/BGPDispatcherImpl.java | 70 +++--- .../protocol/bgp/rib/impl/BGPPeer.java | 66 +++-- .../protocol/bgp/rib/impl/BGPSessionImpl.java | 4 +- .../bgp/rib/impl/StrictBGPPeerRegistry.java | 234 ++++++++++++++++++ .../client/BGPClientSessionNegotiator.java | 42 ++++ .../BGPClientSessionNegotiatorFactory.java} | 21 +- .../client/BGPClientSessionValidator.java | 68 +++++ .../server/BGPServerSessionNegotiator.java | 44 ++++ .../BGPServerSessionNegotiatorFactory.java | 39 +++ .../server/BGPServerSessionValidator.java | 25 ++ .../bgp/rib/impl/spi/BGPDispatcher.java | 20 +- .../bgp/rib/impl/spi/BGPPeerRegistry.java | 67 +++++ .../bgp/rib/impl/spi/BGPServerDispatcher.java | 25 ++ .../bgp/rib/impl/spi/BGPSessionValidator.java | 20 ++ .../bgp/rib/impl/spi/ReusableBGPPeer.java | 19 ++ .../protocol/bgp/rib/impl/FSMTest.java | 34 ++- .../bgp/rib/impl/SimpleSessionListener.java | 11 +- .../rib/impl/StrictBGPPeerRegistryTest.java | 145 +++++++++++ .../protocol/bgp/testtool/Main.java | 12 +- .../bgp/testtool/TestingListener.java | 9 +- .../protocol/bgp/testtool/BGPSpeakerMock.java | 57 +++-- .../integration/bgp/ParserToSalTest.java | 13 +- 34 files changed, 1578 insertions(+), 204 deletions(-) create mode 100644 bgp/rib-impl-config/src/main/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPPeerAcceptorModule.java create mode 100644 bgp/rib-impl-config/src/main/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPPeerAcceptorModuleFactory.java create mode 100644 bgp/rib-impl-config/src/main/java/org/opendaylight/controller/config/yang/bgp/rib/impl/StrictBgpPeerRegistryModule.java create mode 100644 bgp/rib-impl-config/src/main/java/org/opendaylight/controller/config/yang/bgp/rib/impl/StrictBgpPeerRegistryModuleFactory.java create mode 100644 bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/BGPPeerAcceptorModuleTest.java rename bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/{BGPSessionNegotiator.java => AbstractBGPSessionNegotiator.java} (60%) create mode 100644 bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/StrictBGPPeerRegistry.java create mode 100644 bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/client/BGPClientSessionNegotiator.java rename bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/{BGPSessionNegotiatorFactory.java => client/BGPClientSessionNegotiatorFactory.java} (60%) create mode 100644 bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/client/BGPClientSessionValidator.java create mode 100644 bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/server/BGPServerSessionNegotiator.java create mode 100644 bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/server/BGPServerSessionNegotiatorFactory.java create mode 100644 bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/server/BGPServerSessionValidator.java create mode 100644 bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/spi/BGPPeerRegistry.java create mode 100644 bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/spi/BGPServerDispatcher.java create mode 100644 bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/spi/BGPSessionValidator.java create mode 100644 bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/spi/ReusableBGPPeer.java create mode 100644 bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/StrictBGPPeerRegistryTest.java diff --git a/bgp/controller-config/src/main/resources/initial/31-bgp.xml b/bgp/controller-config/src/main/resources/initial/31-bgp.xml index 5e89626677..fc9a245489 100644 --- a/bgp/controller-config/src/main/resources/initial/31-bgp.xml +++ b/bgp/controller-config/src/main/resources/initial/31-bgp.xml @@ -38,6 +38,11 @@ prefix:base-bgp-parser base-bgp-parser + + + prefix:strict-bgp-peer-registry + global-bgp-peer-registry + prefix:bgp-rib-extensions-impl global-rib-extensions @@ -114,6 +119,13 @@ + + bgpspi:bgp-peer-registry + + global-bgp-peer-registry + /modules/module[type='strict-bgp-peer-registry'][name='global-bgp-peer-registry'] + + bgpspi:extensions diff --git a/bgp/controller-config/src/main/resources/initial/41-bgp-example.xml b/bgp/controller-config/src/main/resources/initial/41-bgp-example.xml index 5d716cedc5..bdce9c4c33 100644 --- a/bgp/controller-config/src/main/resources/initial/41-bgp-example.xml +++ b/bgp/controller-config/src/main/resources/initial/41-bgp-example.xml @@ -35,6 +35,25 @@ + + prefix:bgp-peer-acceptor + bgp-peer-server + + + + + + + prefix:bgp-dispatcher + global-bgp-dispatcher + + + prefix:bgp-peer-registry + global-bgp-peer-registry + + + +