I have configured ODL BGP with several BGP neighbors. I tried to follow bgp user guide
http://docs.opendaylight.org/en/stable-nitrogen/user-guide/bgp-user-guide.html
Nevertheless I got it running only when I configured all neighbors inside etc/opendaylight/bgp/protocols-config.xml.
If I tried to add new neighbor via restconf it appeared just in config tree but it was not populated to operational tree.
Is it bug in code or in documentation?
Steps to reproduce:
I removed one neighbor from etc/opendaylight/bgp/protocols-config.xml and start fresh odl
Then I added that neighbor via postman:
Body:
<neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions">
<neighbor-address>10.166.30.38</neighbor-address>
<timers>
<config>
<hold-time>90</hold-time>
<connect-retry>10</connect-retry>
</config>
</timers>
<transport>
<config>
<remote-port>179</remote-port>
<passive-mode>false</passive-mode>
</config>
</transport>
<config>
<peer-type>EXTERNAL</peer-type>
<peer-as>65102</peer-as>
</config>
</neighbor>
In karaf.log I can find following exception:
2018-03-21 14:06:36,440 | DEBUG | on-dispatcher-75 | BgpDeployerImpl | 202 - org.opendaylight.bgpcep.bgp-rib-impl - 0.8.1 | Creating Peer instance with configuration: Neighbor{getConfig=Config{getPeerAs=AsNumber [_value=65102], getPeerType=EXTERNAL, getSendCommunity=NONE, isRouteFlapDamping=false, augmentations={}}, getNeighborAddress=IpAddress [_ipv4Address=Ipv4Address [_value=10.166.30.38]], getTimers=Timers{getConfig=Config{getConnectRetry=10, getHoldTime=90, getKeepaliveInterval=30, getMinimumAdvertisementInterval=30, augmentations={}}, augmentations={}}, getTransport=Transport{getConfig=Config{isMtuDiscovery=false, isPassiveMode=false, augmentations={interface org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.Config1=Config1
{getRemotePort=PortNumber [_value=179]}}}, augmentations={}}, augmentations={}}
2018-03-21 14:06:36,442 | ERROR | on-dispatcher-75 | DataTreeChangeListenerActor | 238 - org.opendaylight.controller.sal-clustering-commons - 1.6.1 | member-1-shard-default-config: Error notifying listener org.opendaylight.protocol.bgp.rib.impl.config.BgpDeployerImpl@2deb15
java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:782)[27:com.google.guava:22.0.0]
at org.opendaylight.protocol.bgp.rib.impl.config.BgpPeer$BgpPeerSingletonService.<init>(BgpPeer.java:241)[202:org.opendaylight.bgpcep.bgp-rib-impl:0.8.1]
at org.opendaylight.protocol.bgp.rib.impl.config.BgpPeer$BgpPeerSingletonService.<init>(BgpPeer.java:221)[202:org.opendaylight.bgpcep.bgp-rib-impl:0.8.1]
at org.opendaylight.protocol.bgp.rib.impl.config.BgpPeer.start(BgpPeer.java:89)[202:org.opendaylight.bgpcep.bgp-rib-impl:0.8.1]
at org.opendaylight.protocol.bgp.rib.impl.config.BgpDeployerImpl.initiatePeerInstance(BgpDeployerImpl.java:343)[202:org.opendaylight.bgpcep.bgp-rib-impl:0.8.1]
at org.opendaylight.protocol.bgp.rib.impl.config.BgpDeployerImpl.onNeighborCreated(BgpDeployerImpl.java:297)[202:org.opendaylight.bgpcep.bgp-rib-impl:0.8.1]
at org.opendaylight.protocol.bgp.rib.impl.config.BgpDeployerImpl.onNeighborModified(BgpDeployerImpl.java:281)[202:org.opendaylight.bgpcep.bgp-rib-impl:0.8.1]
at org.opendaylight.protocol.bgp.rib.impl.config.BgpDeployerImpl.onNeighborsChanged(BgpDeployerImpl.java:267)[202:org.opendaylight.bgpcep.bgp-rib-impl:0.8.1]
at org.opendaylight.protocol.bgp.rib.impl.config.BgpDeployerImpl.onDataTreeChanged(BgpDeployerImpl.java:116)[202:org.opendaylight.bgpcep.bgp-rib-impl:0.8.1]
at org.opendaylight.controller.md.sal.binding.impl.BindingDOMDataTreeChangeListenerAdapter.onDataTreeChanged(BindingDOMDataTreeChangeListenerAdapter.java:41)[232:org.opendaylight.controller.sal-binding-broker-impl:1.6.1]
at org.opendaylight.controller.cluster.datastore.DataTreeChangeListenerActor.dataChanged(DataTreeChangeListenerActor.java:67)[245:org.opendaylight.controller.sal-distributed-datastore:1.6.1]
at org.opendaylight.controller.cluster.datastore.DataTreeChangeListenerActor.handleReceive(DataTreeChangeListenerActor.java:41)[245:org.opendaylight.controller.sal-distributed-datastore:1.6.1]
at org.opendaylight.controller.cluster.common.actor.AbstractUntypedActor.onReceive(AbstractUntypedActor.java:38)[238:org.opendaylight.controller.sal-clustering-commons:1.6.1]
at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:165)[34:com.typesafe.akka.actor:2.4.18]
at akka.actor.Actor$class.aroundReceive(Actor.scala:502)[34:com.typesafe.akka.actor:2.4.18]
at akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:95)[34:com.typesafe.akka.actor:2.4.18]
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526)[34:com.typesafe.akka.actor:2.4.18]
at akka.actor.ActorCell.invoke(ActorCell.scala:495)[34:com.typesafe.akka.actor:2.4.18]
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257)[34:com.typesafe.akka.actor:2.4.18]
at akka.dispatch.Mailbox.run(Mailbox.scala:224)[34:com.typesafe.akka.actor:2.4.18]
at akka.dispatch.Mailbox.exec(Mailbox.scala:234)[34:com.typesafe.akka.actor:2.4.18]
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)[380:org.scala-lang.scala-library:2.11.11.v20170413-090219-8a413ba7cc]
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)[380:org.scala-lang.scala-library:2.11.11.v20170413-090219-8a413ba7cc]
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)[380:org.scala-lang.scala-library:2.11.11.v20170413-090219-8a413ba7cc]
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)[380:org.scala-lang.scala-library:2.11.11.v20170413-090219-8a413ba7cc]
2018-03-21 14:06:58,806 | DEBUG | entLoopGroup-7-1 | BGPSessionImpl | 202 - org.opendaylight.bgpcep.bgp-rib-impl - 0.8.1 | Message was received: Keepalive [augmentation=[]]
2018-03-21 14:06:58,869 | DEBUG | entLoopGroup-7-1 | BGPMessageToByteEncoder | 202 - org.opendaylight.bgpcep.bgp-rib-impl - 0.8.1 | Message sent to output: Keepalive [augmentation=[]]