[BGPCEP-244] issue in config-netconf-connector when PUTting BGP peer Created: 17/Jun/15  Updated: 03/Mar/19  Resolved: 12/Jan/16

Status: Resolved
Project: bgpcep
Component/s: BGP
Affects Version/s: Bugzilla Migration
Fix Version/s: Bugzilla Migration

Type: Bug
Reporter: Giles Heron Assignee: Milos Fabian
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Operating System: All
Platform: All


External issue ID: 3780

 Description   

I'm converting my Postman collection for configuring ODL BGP from using POST to using PUT (since Lithium doesn't support POSTing on top of an existing config entry).

So am dong a PUT to /restconf/config/opendaylight-inventory:nodes/node/controller-config/yang-ext:mount/config:modules/module/odl-bgp-rib-impl-cfg:bgp-peer/example-bgp-peer

the body is:

{ "module" : [
{
"type": "odl-bgp-rib-impl-cfg:bgp-peer",
"name": "example-bgp-peer",
"odl-bgp-rib-impl-cfg:peer-role": "ebgp",
"odl-bgp-rib-impl-cfg:host": "172.23.29.125",
"odl-bgp-rib-impl-cfg:initiate-connection": true,
"odl-bgp-rib-impl-cfg:rib":

{ "type": "odl-bgp-rib-impl-cfg:rib", "name": "example-bgp-rib" }

,
"odl-bgp-rib-impl-cfg:peer-registry":

{ "type": "odl-bgp-rib-impl-cfg:bgp-peer-registry", "name": "global-bgp-peer-registry" }

,
"odl-bgp-rib-impl-cfg:port": 179,
"odl-bgp-rib-impl-cfg:advertized-table": [

{ "type": "odl-bgp-rib-impl-cfg:bgp-table-type", "name": "ipv6-unicast" }

,

{ "type": "odl-bgp-rib-impl-cfg:bgp-table-type", "name": "linkstate" }

,

{ "type": "odl-bgp-rib-impl-cfg:bgp-table-type", "name": "flowspec" }

,

{ "type": "odl-bgp-rib-impl-cfg:bgp-table-type", "name": "ipv4-unicast" }

],
"odl-bgp-rib-impl-cfg:holdtimer": 180,
"odl-bgp-rib-impl-cfg:remote-as": 65505
}
]
}

this fails with "500 Server Error".

From the controller logs I see:

2015-06-17 10:57:56,699 | TRACE | entLoopGroup-2-2 | InstanceConfig | 161 - org.opendaylight.controller.config-netconf-connector - 0.3.0.SNAPSHOT | Trying to set value AttributeConfigElement [defaultValue=null, value=MappedDependency

{namespace='urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:impl', serviceName='rib', refName='example-bgp-rib'}

] of attribute rib with org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.resolving.ObjectNameAttributeResolvingStrategy@3abe1c4a
2015-06-17 10:57:56,699 | TRACE | entLoopGroup-2-2 | ctNameAttributeResolvingStrategy | 161 - org.opendaylight.controller.config-netconf-connector - 0.3.0.SNAPSHOT | Getting service instance by service name urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:impl : rib and ref name example-bgp-rib
2015-06-17 10:57:56,701 | DEBUG | entLoopGroup-2-2 | TransactionProvider | 161 - org.opendaylight.controller.config-netconf-connector - 0.3.0.SNAPSHOT | Aborting transaction org.opendaylight.controller:TransactionName=ConfigTransaction-83-105,type=ConfigTransaction
2015-06-17 10:57:56,701 | TRACE | entLoopGroup-2-2 | ConfigTransactionControllerImpl | 146 - org.opendaylight.controller.config-manager - 0.3.0.SNAPSHOT | Aborting transactionName=ConfigTransaction-83-105
2015-06-17 10:57:56,702 | TRACE | action-83-105'}} | DeadlockMonitor | 146 - org.opendaylight.controller.config-manager - 0.3.0.SNAPSHOT | Exiting DeadLockMonitorRunnable{TransactionIdentifier{name='ConfigTransaction-83-105'}}
2015-06-17 10:57:56,705 | ERROR | entLoopGroup-2-2 | NetconfOperationRouterImpl | 178 - org.opendaylight.controller.netconf-impl - 0.3.0.SNAPSHOT | Unexpected exception during netconf operation execution
java.lang.IllegalStateException: Unable to resolve value AttributeConfigElement [defaultValue=null, value=MappedDependency

{namespace='urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:impl', serviceName='rib', refName='example-bgp-rib'}

] to attribute rib
at org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.InstanceConfig.resolveConfiguration(InstanceConfig.java:131)[161:org.opendaylight.controller.config-netconf-connector:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.InstanceConfig.fromXml(InstanceConfig.java:192)[161:org.opendaylight.controller.config-netconf-connector:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ModuleConfig.fromXml(ModuleConfig.java:59)[161:org.opendaylight.controller.config-netconf-connector:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.Config$1.resolveElement(Config.java:147)[161:org.opendaylight.controller.config-netconf-connector:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.Config$1.resolveElement(Config.java:144)[161:org.opendaylight.controller.config-netconf-connector:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.Config.resolveModule(Config.java:224)[161:org.opendaylight.controller.config-netconf-connector:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.Config.fromXmlModulesResolved(Config.java:152)[161:org.opendaylight.controller.config-netconf-connector:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfigXmlParser$EditConfigExecution.getResolvedXmlElements(EditConfigXmlParser.java:174)[161:org.opendaylight.controller.config-netconf-connector:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfig.setOnTransaction(EditConfig.java:184)[161:org.opendaylight.controller.config-netconf-connector:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfig.test(EditConfig.java:120)[161:org.opendaylight.controller.config-netconf-connector:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfig.executeTests(EditConfig.java:96)[161:org.opendaylight.controller.config-netconf-connector:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfig.getResponseInternal(EditConfig.java:75)[161:org.opendaylight.controller.config-netconf-connector:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfig.handleWithNoSubsequentOperations(EditConfig.java:308)[161:org.opendaylight.controller.config-netconf-connector:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.util.mapping.AbstractLastNetconfOperation.handle(AbstractLastNetconfOperation.java:33)[159:org.opendaylight.controller.netconf-util:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.util.mapping.AbstractNetconfOperation.handle(AbstractNetconfOperation.java:100)[159:org.opendaylight.controller.netconf-util:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.impl.osgi.NetconfOperationRouterImpl$NetconfOperationExecution.execute(NetconfOperationRouterImpl.java:185)[178:org.opendaylight.controller.netconf-impl:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.impl.osgi.NetconfOperationRouterImpl.executeOperationWithHighestPriority(NetconfOperationRouterImpl.java:114)[178:org.opendaylight.controller.netconf-impl:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.impl.osgi.NetconfOperationRouterImpl.onNetconfMessage(NetconfOperationRouterImpl.java:87)[178:org.opendaylight.controller.netconf-impl:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.impl.NetconfServerSessionListener.processDocument(NetconfServerSessionListener.java:113)[178:org.opendaylight.controller.netconf-impl:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.impl.NetconfServerSessionListener.onMessage(NetconfServerSessionListener.java:86)[178:org.opendaylight.controller.netconf-impl:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.impl.NetconfServerSessionListener.onMessage(NetconfServerSessionListener.java:29)[178:org.opendaylight.controller.netconf-impl:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.nettyutil.AbstractNetconfSession.handleMessage(AbstractNetconfSession.java:61)[169:org.opendaylight.controller.netconf-netty-util:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.nettyutil.AbstractNetconfSession.handleMessage(AbstractNetconfSession.java:32)[169:org.opendaylight.controller.netconf-netty-util:0.3.0.SNAPSHOT]
at org.opendaylight.protocol.framework.AbstractProtocolSession.channelRead0(AbstractProtocolSession.java:53)[151:org.opendaylight.controller.protocol-framework:0.6.0.SNAPSHOT]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)[148:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[148:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[148:io.netty.transport:4.0.26.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:242)[174:io.netty.codec:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[148:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[148:io.netty.transport:4.0.26.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:242)[174:io.netty.codec:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[148:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[148:io.netty.transport:4.0.26.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:847)[148:io.netty.transport:4.0.26.Final]
at io.netty.channel.local.LocalChannel.finishPeerRead(LocalChannel.java:326)[148:io.netty.transport:4.0.26.Final]
at io.netty.channel.local.LocalChannel.access$400(LocalChannel.java:45)[148:io.netty.transport:4.0.26.Final]
at io.netty.channel.local.LocalChannel$5.run(LocalChannel.java:312)[148:io.netty.transport:4.0.26.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:357)[149:io.netty.common:4.0.26.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)[148:io.netty.transport:4.0.26.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)[149:io.netty.common:4.0.26.Final]
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)[149:io.netty.common:4.0.26.Final]
at java.lang.Thread.run(Thread.java:745)[:1.7.0_60]
Caused by: java.lang.IllegalArgumentException: No service mapped to urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:impl:rib:example-bgp-rib. Wrong service type, available service types: [rib-instance, bgp-dispatcher, bgp-peer-registry, bgp-table-type]
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:145)[94:com.google.guava:18.0.0]
at org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ServiceRegistryWrapper.getByServiceAndRefName(ServiceRegistryWrapper.java:36)[161:org.opendaylight.controller.config-netconf-connector:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.resolving.ObjectNameAttributeResolvingStrategy.parseAttribute(ObjectNameAttributeResolvingStrategy.java:44)[161:org.opendaylight.controller.config-netconf-connector:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.fromxml.AttributeConfigElement.resolveValue(AttributeConfigElement.java:43)[161:org.opendaylight.controller.config-netconf-connector:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.InstanceConfig.resolveConfiguration(InstanceConfig.java:127)[161:org.opendaylight.controller.config-netconf-connector:0.3.0.SNAPSHOT]
... 41 more
2015-06-17 10:57:56,706 | TRACE | entLoopGroup-2-2 | NetconfServerSessionListener | 178 - org.opendaylight.controller.netconf-impl - 0.3.0.SNAPSHOT | Error occurred while processing message
NetconfDocumentedException{message=Unexpected error, errorType=application, errorTag=operation_failed, errorSeverity=error, errorInfo={error=java.lang.IllegalStateException: Unable to resolve value AttributeConfigElement [defaultValue=null, value=MappedDependency

{namespace='urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:impl', serviceName='rib', refName='example-bgp-rib'}

] to attribute rib}}
at org.opendaylight.controller.netconf.impl.osgi.NetconfOperationRouterImpl.handleUnexpectedEx(NetconfOperationRouterImpl.java:100)[178:org.opendaylight.controller.netconf-impl:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.impl.osgi.NetconfOperationRouterImpl.onNetconfMessage(NetconfOperationRouterImpl.java:89)[178:org.opendaylight.controller.netconf-impl:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.impl.NetconfServerSessionListener.processDocument(NetconfServerSessionListener.java:113)[178:org.opendaylight.controller.netconf-impl:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.impl.NetconfServerSessionListener.onMessage(NetconfServerSessionListener.java:86)[178:org.opendaylight.controller.netconf-impl:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.impl.NetconfServerSessionListener.onMessage(NetconfServerSessionListener.java:29)[178:org.opendaylight.controller.netconf-impl:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.nettyutil.AbstractNetconfSession.handleMessage(AbstractNetconfSession.java:61)[169:org.opendaylight.controller.netconf-netty-util:0.3.0.SNAPSHOT]
at org.opendaylight.controller.netconf.nettyutil.AbstractNetconfSession.handleMessage(AbstractNetconfSession.java:32)[169:org.opendaylight.controller.netconf-netty-util:0.3.0.SNAPSHOT]
at org.opendaylight.protocol.framework.AbstractProtocolSession.channelRead0(AbstractProtocolSession.java:53)[151:org.opendaylight.controller.protocol-framework:0.6.0.SNAPSHOT]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)[148:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[148:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[148:io.netty.transport:4.0.26.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:242)[174:io.netty.codec:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[148:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[148:io.netty.transport:4.0.26.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:242)[174:io.netty.codec:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339)[148:io.netty.transport:4.0.26.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324)[148:io.netty.transport:4.0.26.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:847)[148:io.netty.transport:4.0.26.Final]
at io.netty.channel.local.LocalChannel.finishPeerRead(LocalChannel.java:326)[148:io.netty.transport:4.0.26.Final]
at io.netty.channel.local.LocalChannel.access$400(LocalChannel.java:45)[148:io.netty.transport:4.0.26.Final]
at io.netty.channel.local.LocalChannel$5.run(LocalChannel.java:312)[148:io.netty.transport:4.0.26.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:357)[149:io.netty.common:4.0.26.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)[148:io.netty.transport:4.0.26.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)[149:io.netty.common:4.0.26.Final]
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)[149:io.netty.common:4.0.26.Final]
at java.lang.Thread.run(Thread.java:745)[:1.7.0_60]
2015-06-17 10:57:56,707 | TRACE | entLoopGroup-2-2 | SendErrorExceptionUtil | 159 - org.opendaylight.controller.netconf-util - 0.3.0.SNAPSHOT | Sending error <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<rpc-error>
<error-type>application</error-type>
<error-tag>operation-failed</error-tag>
<error-severity>error</error-severity>
<error-message>Unexpected error</error-message>
<error-info>
<error>java.lang.IllegalStateException: Unable to resolve value AttributeConfigElement [defaultValue=null, value=MappedDependency

{namespace='urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:impl', serviceName='rib', refName='example-bgp-rib'}

] to attribute rib</error>
</error-info>
</rpc-error>
</rpc-reply>

there's some pretty crunchy identity processing that happens in config.yang so am wondering if that's the issue?



 Comments   
Comment by Vratko Polak [ 18/Jun/15 ]

Hi Giles.

> "odl-bgp-rib-impl-cfg:rib": {
> "type": "odl-bgp-rib-impl-cfg:rib",

Quick look at BGPCEP git repository, file bgp/rib-impl/src/main/yang/odl-bgp-rib-impl-cfg.yang lines 349-356:
container rib {
uses config:service-ref {
refine type

{ mandatory true; config:required-identity rib-instance; }

}
}

Conclusion: Try using "odl-bgp-rib-impl-cfg:rib-instance" instead of "odl-bgp-rib-impl-cfg:rib".

Comment by Vratko Polak [ 18/Jun/15 ]

Additional comment to share my process which helped me where to look.
I just read the log searching for a clue, and in this case I spotted these two:

> Unable to resolve value AttributeConfigElement [defaultValue=null, value=MappedDependency

{namespace='urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:impl', serviceName='rib', refName='example-bgp-rib'}

] to attribute rib

> Wrong service type, available service types: [rib-instance, bgp-dispatcher, bgp-peer-registry, bgp-table-type]

Then I just had to figure out (hence the look info .yang file) which service type is the correct one, 'rib' or 'rib-instance'.

Comment by Giles Heron [ 18/Jun/15 ]

Excellent - thanks Vratko. I didn't spot that in the logs...

it's kind of strange - if you do a get on config:modules it just shows "rib" instead of "rib-instance". You'd think that get and put would use the same syntax...

Comment by Giles Heron [ 22/Jun/15 ]

so this is confusing

I can either PUT:

"odl-bgp-rib-impl-cfg:rib":

{ "type": "odl-bgp-rib-impl-cfg:rib-instance", "name": "example-bgp-rib" }

or:

"odl-bgp-rib-impl-cfg:rib":

{ "type": "odl-bgp-rib-cfg:rib", "name": "example-bgp-rib" }

those have the same effect in terms of configuring BGP.

But you see different stuff when you do a GET of config:modules

in the former case you see:

"odl-bgp-rib-impl-cfg:rib": {
"type": "odl-bgp-rib-impl-cfg:rib-instance",
"name": "example-bgp-rib"
}

(so exactly the same as configured)

but in the latter you see:

"odl-bgp-rib-impl-cfg:rib": {
"type": "odl-bgp-rib-impl-cfg:rib",
"name": "example-bgp-rib"
}

(so a different module to what was configured).

Any ideas?

Comment by Vratko Polak [ 29/Jun/15 ]

> Any ideas?

There are actually three things named example-bgp-rib defined in 41-bgp-example.xml
One is module (type bgp-impl) which acts as a provider to two services (types rib and rib-instance).

Looking once again into bgpcep/bgp/rib-impl/src/main/yang/odl-bgp-rib-impl-cfg.yang, identity rib-instance has the following definition:
identity rib-instance

{ description "Service representing a RIB instance"; base "config:service-type"; config:java-class "org.opendaylight.protocol.bgp.rib.impl.spi.RIB"; }

whereas identity rib is defined in bgpcep/bgp/rib-api/src/main/yang/odl-bgp-rib-cfg.yang as:
identity rib

{ description "Service representing a BGP RIB service. Each instance allows registration of listeners."; base "config:service-type"; config:java-class "org.opendaylight.protocol.bgp.rib.RibReference"; }

That is, the two services use different interface, but the provided implementation supports both interfaces.

It seems like current 41-bgp-example.xml (bgp-peer, commented-out by default) refers to wrong service (referring to correct module), but only some "layers" of ODL are strict enough to detect such an error.

Comment by Dana Kutenicsova [ 09/Jul/15 ]

RibReference is working with InstanceIdentifier. Analyze if it's needed, if it is, analyze the bug below and change the behaviour to YangInstanceIdentifier.

Comment by Milos Fabian [ 14/Jul/15 ]

As Vratko says using "type":"odl-bgp-rib-impl-cfg:rib-instance" is correct one - fixed wiki example (https://wiki.opendaylight.org/view/BGP_LS_PCEP:User_Guide#BGP_Peer_2) and init config file (https://git.opendaylight.org/gerrit/#/c/24090).

Both services are still required - "odl-bgp-rib-cfg:rib" (RibReference - providing BA instance identifier) is used in bgp-topology-provider.

Comment by Milos Fabian [ 20/Jul/15 ]

Fixed user-giude in docs:
https://git.opendaylight.org/gerrit/#/c/24215
https://git.opendaylight.org/gerrit/#/c/24103

Fixed 41-bgp-example init config file:
https://git.opendaylight.org/gerrit/#/c/24090
https://git.opendaylight.org/gerrit/#/c/24101
https://git.opendaylight.org/gerrit/#/c/24104

Comment by Vratko Polak [ 12/Jan/16 ]

Additional info about namespaces for XML data.

identity rib-instance (the correct thing for bgp-peer "rib" container):
Yang file: bgpcep/bgp/rib-impl/src/main/yang/odl-bgp-rib-impl-cfg.yang
Java class: org.opendaylight.protocol.bgp.rib.impl.spi.RIB
Json prefix: odl-bgp-rib-impl-cfg
XML namespace: urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:impl

identity rib (not for bgp-peer, but for topology providers):
Yang file: bgpcep/bgp/rib-api/src/main/yang/odl-bgp-rib-cfg.yang
Java class: org.opendaylight.protocol.bgp.rib.RibReference
Json prefix: odl-bgp-rib-cfg
XML namespace: urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:cfg

Generated at Wed Feb 07 19:12:27 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.