[MDSAL-512] Exception encountered while processing vpnv6 route Created: 06/Jan/20  Updated: 07/Jan/20  Resolved: 07/Jan/20

Status: Resolved
Project: mdsal
Component/s: models
Affects Version/s: Fluorine SR3, 4.0.8, 5.0.6, 3.0.14
Fix Version/s: 6.0.0, 4.0.9, 5.0.7, 3.0.15

Type: Bug Priority: High
Reporter: Ajay Lele Assignee: Ajay Lele
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

When Controller peers with a router that is advertising vpnv6 route with ipv4 next-hop address, below exception is seen during session establishment. Issue is seen in all releases Fluorine and beyond.

2020-01-02T11:47:30,092 | ERROR | opendaylight-cluster-data-notification-dispatcher-56 | DataTreeChangeListenerActor      | 274 - org.opendaylight.controller.sal-clustering-commons - 1.8.1 | member-1-shard-default-operational: Error notifying listener org.opendaylight.controller.sal.core.compat.LegacyDOMDataBrokerAdapter$2$$Lambda$968/1234951622@264c7425
java.lang.IllegalArgumentException: Supplied value "10.176.0.235" does not match required pattern "((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))(%[\p{N}\p{L}]+)?"
        at org.opendaylight.yangtools.yang.binding.CodeHelpers.checkPattern(CodeHelpers.java:130) ~[336:org.opendaylight.mdsal.yang-binding:0.13.1]
        at org.opendaylight.yangtools.yang.binding.CodeHelpers.checkPattern(CodeHelpers.java:149) ~[336:org.opendaylight.mdsal.yang-binding:0.13.1]
        at org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address.<init>(Ipv6Address.java:31) ~[322:org.opendaylight.mdsal.model.ietf-inet-types-2013-07-15:1.5.1]
        at org.opendaylight.mdsal.binding.dom.codec.impl.EncapsulatedValueCodec.deserialize(EncapsulatedValueCodec.java:73) ~[301:org.opendaylight.mdsal.binding-dom-codec:0.13.1]
        at org.opendaylight.mdsal.binding.dom.codec.impl.LeafNodeCodecContext.deserializeObject(LeafNodeCodecContext.java:196) ~[301:org.opendaylight.mdsal.binding-dom-codec:0.13.1]
        at org.opendaylight.mdsal.binding.dom.codec.impl.DataObjectCodecContext.getBindingChildValue(DataObjectCodecContext.java:370) ~[301:org.opendaylight.mdsal.binding-dom-codec:0.13.1]
        at org.opendaylight.mdsal.binding.dom.codec.impl.LazyDataObject.getBindingData(LazyDataObject.java:152) ~[301:org.opendaylight.mdsal.binding-dom-codec:0.13.1]
        at org.opendaylight.mdsal.binding.dom.codec.impl.LazyDataObject.invoke(LazyDataObject.java:75) ~[301:org.opendaylight.mdsal.binding-dom-codec:0.13.1]
        at com.sun.proxy.$Proxy360.getGlobal(Unknown Source) ~[203:org.opendaylight.bgpcep.bgp-concepts:0.10.1]
        at org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.next.hop.c.next.hop.ipv6.next.hop._case.Ipv6NextHop$StreamWriter.serialize(DataObjectSerializerPrototype.java) ~[203:org.opendaylight.bgpcep.bgp-concepts:0.10.1]
        at org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.next.hop.c.next.hop.Ipv6NextHopCase$StreamWriter.serialize(DataObjectSerializerPrototype.java) ~[203:org.opendaylight.bgpcep.bgp-concepts:0.10.1]
        at org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry$DataObjectSerializerProxy.serialize(BindingNormalizedNodeCodecRegistry.java:351) ~[301:org.opendaylight.mdsal.binding-dom-codec:0.13.1]
        at org.opendaylight.mdsal.binding.dom.codec.util.ChoiceDispatchSerializer.serialize(ChoiceDispatchSerializer.java:46) ~[301:org.opendaylight.mdsal.binding-dom-codec:0.13.1]
        at org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.Attributes$StreamWriter.serialize(DataObjectSerializerPrototype.java) ~[217:org.opendaylight.bgpcep.bgp-parser-api:0.10.1]
        at org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.rev180329.l3vpn.ip.route.VpnRoute$StreamWriter.serialize(DataObjectSerializerPrototype.java) ~[207:org.opendaylight.bgpcep.bgp-l3vpn:0.10.1]
        at org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry$DataObjectSerializerProxy.serialize(BindingNormalizedNodeCodecRegistry.java:351) ~[301:org.opendaylight.mdsal.binding-dom-codec:0.13.1]
        at org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry.toNormalizedNode(BindingNormalizedNodeCodecRegistry.java:117) ~[301:org.opendaylight.mdsal.binding-dom-codec:0.13.1]
        at org.opendaylight.mdsal.binding.dom.adapter.BindingToNormalizedNodeCodec.toNormalizedNode(BindingToNormalizedNodeCodec.java:162) ~[300:org.opendaylight.mdsal.binding-dom-adapter:2.5.1]
        at org.opendaylight.controller.md.sal.binding.impl.AbstractWriteTransaction.put(AbstractWriteTransaction.java:37) ~[269:org.opendaylight.controller.sal-binding-broker-impl:1.8.1]
        at org.opendaylight.controller.md.sal.binding.impl.BindingDOMWriteTransactionAdapter.put(BindingDOMWriteTransactionAdapter.java:34) ~[269:org.opendaylight.controller.sal-binding-broker-impl:1.8.1]
        at org.opendaylight.protocol.bgp.rib.impl.EffectiveRibInWriter.writeRoutes(EffectiveRibInWriter.java:277) ~[223:org.opendaylig


 Comments   
Comment by Ajay Lele [ 06/Jan/20 ]
  • For IPv6 address-family, when next-hop address is an IPv4 address, it is encoded as IPv4-mapped IPv6 address as defined in https://tools.ietf.org/html/rfc4659#section-3.2.1.2. So this is how the route will be received from the router.
  • Now even in case of oxygen and prior where this exception was not seen, contents of operational RIB for such a route showed ipv6-next-hop with an IPv4 address value. This itself does not seem right
                                     "attributes": {
                                        "as-path": {},
                                        "ipv6-next-hop": {
                                            "global": "10.176.0.235"
                                        },
                                    "attributes": {
                                        "as-path": {},
                                        "ipv6-next-hop": {
                                            "global": "::ffff:ab0:eb"
                                        },
Generated at Wed Feb 07 20:09:59 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.