Exception encountered while processing vpnv6 route

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

Environment

None

Activity

Ajay Lele January 6, 2020 at 6:39 PM

  • 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" },
Done

Details

Assignee

Reporter

Components

Priority

Created January 6, 2020 at 6:37 PM
Updated February 6, 2025 at 2:14 PM
Resolved January 7, 2020 at 12:43 PM