[NETVIRT-208] BGPVPN Network association does not work if subnets have routers Created: 18/Oct/16  Updated: 19/Nov/19  Resolved: 08/Nov/19

Status: Resolved
Project: netvirt
Component/s: General
Affects Version/s: Boron
Fix Version/s: None

Type: Bug Priority: Medium
Reporter: Romanos Skiadas Assignee: Abhinav Gupta
Resolution: Won't Do Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Operating System: All
Platform: All


Attachments: Text File compute_ovs.txt     Text File controller_ovs.txt     Text File karaf.log    
External issue ID: 6962

 Description   

This is a regression compared to Be with vpnservice.

The most minimal setup I could reproduce this with was:

-Two networks and a subnet for each
-Create two routers and connect each to one subnet
-Create an instance on each subnet
-Pinging instances does not work at this step as it should be
-Create a bgpvpn:
neutron bgpvpn-create --name rski1 --import-targets 88:88 --export-targets 88:88 --route-distinguishers 11:11
-create net assocs with the two networks:
bgpvpn-net-assoc-create --network net1id bgpvpnid
bgpvpn-net-assoc-create --network net2id bgpvpnid
-try to ping instance 2 from instance one: does not work.

It seems like the mechanism that ensures that layer 2 routing is disabled and instead packets are routed on layer 3 does not work. ARP related flows are active and the packets' dst ethernet address fields are not rewritten.

Tested with Boron 0.5.1-20161017.001225-477



 Comments   
Comment by Romanos Skiadas [ 18/Oct/16 ]

Attachment karaf.log has been added with description: karaf log

Comment by Romanos Skiadas [ 18/Oct/16 ]

Attachment controller_ovs.txt has been added with description: Ovs information from the controller node

Comment by Romanos Skiadas [ 18/Oct/16 ]

Attachment compute_ovs.txt has been added with description: Compute ovs information

Comment by Abhinav Gupta [ 18/Oct/16 ]

Please use bpvpn-router-assoc-create * commands.

Since you have subnets associated to routers, associate these routers to the same vpn and then try out ping between instances.

Thanks,
Abhinav

Comment by Abhinav Gupta [ 18/Oct/16 ]

Please allow me to correct myself here.

1. As per the current implementation, we can associate only one router to a VPN.

2. For your use-case, upon router-create for each of the routers, internal VPNs will be created. So, upon doing a “bgpvpn-net-assoc-create” after that, you are essentially indicating for this network to be a part of:

a. The internal VPN previously created
AND
b. The new VPN it is being associated to.
This is rightfully not allowed, hence you do not see the ping to be successful.

So, either:

1. add both of the subnets to router via “router-interface-add” and then do a “bgpvpn-router-assoc-create”
OR
2. create networks with subnets and instances, then the VPNs, followed by “bgpvpn-net-assoc-create”. DO NOT add these subnets to the router via “router-interface-add”.

Hope this clarifies.

Comment by Romanos Skiadas [ 18/Oct/16 ]

(In reply to Abhinav Gupta from comment #5)
> Please allow me to correct myself here.
>
> 1. As per the current implementation, we can associate only one router to a
> VPN.
>
> 2. For your use-case, upon router-create for each of the routers, internal
> VPNs will be created. So, upon doing a “bgpvpn-net-assoc-create” after that,
> you are essentially indicating for this network to be a part of:
>
> a. The internal VPN previously created
> AND
> b. The new VPN it is being associated to.
> This is rightfully not allowed, hence you do not see the ping to be
> successful.
> So, either:
>
> 1. add both of the subnets to router via “router-interface-add” and then do
> a “bgpvpn-router-assoc-create”
> OR

>
> Hope this clarifies.

I understand your points, but the openstack documentation states it like so:
Associating a BGPVPN to a Network can be done for both BGPVPN of type l2 and of type l3. For type L3, the semantic is that all Subnets bound to the Network will be interconnected with the BGP VPN (and thus between themselves).
http://docs.openstack.org/developer/networking-bgpvpn/api.html#network-association

It seems to me that limiting the network association depending on whether subnets have been added to routers breaks the semantics of net-assoc.
What I mean is that openstack promises that net-assoc will bind all the subnets to the VPN, but due to opendaylight constraints, this will fail silently, i.e. this bug.

Further down in the openstack docs however:
To avoid any ambiguity on semantics in particular the context of processing associated to a Router (e.g. NAT or FWaaS), if a said Subnet in a Network is bound to a Router, this API does not allow to both associate the Network to an L3 BGPVPN and the Router to the same or to a distinct L3 BGPVPN.

This is indeed in some way what you're saying, but not exactly. Network assoc should not happen if there is a router assoc. For opendaylight there is an internal router assoc so having a router means that network assoc will always fail.

I think that this same paragraph that explains the mutual exclusion of network and router association implies that network assoc should work for subnets attached to routers that don't participate in assocs, which is the gist of this bug.

> 2. create networks with subnets and instances, then the VPNs, followed by
> “bgpvpn-net-assoc-create”. DO NOT add these subnets to the router via
> “router-interface-add”.
Yes, if we do not create routers this case works for Boron.

Comment by Abhinav Gupta [ 18/Oct/16 ]

(In reply to Romanos Skiadas from comment #6)
> (In reply to Abhinav Gupta from comment #5)
> > Please allow me to correct myself here.
> >
> > 1. As per the current implementation, we can associate only one router to a
> > VPN.
> >
> > 2. For your use-case, upon router-create for each of the routers, internal
> > VPNs will be created. So, upon doing a “bgpvpn-net-assoc-create” after that,
> > you are essentially indicating for this network to be a part of:
> >
> > a. The internal VPN previously created
> > AND
> > b. The new VPN it is being associated to.
> > This is rightfully not allowed, hence you do not see the ping to be
> > successful.
> > So, either:
> >
> > 1. add both of the subnets to router via “router-interface-add” and then do
> > a “bgpvpn-router-assoc-create”
> > OR
>
> >
> > Hope this clarifies.
>
> I understand your points, but the openstack documentation states it like so:
> Associating a BGPVPN to a Network can be done for both BGPVPN of type l2 and
> of type l3. For type L3, the semantic is that all Subnets bound to the
> Network will be interconnected with the BGP VPN (and thus between
> themselves).
> http://docs.openstack.org/developer/networking-bgpvpn/api.html#network-
> association
>
> It seems to me that limiting the network association depending on whether
> subnets have been added to routers breaks the semantics of net-assoc.
> What I mean is that openstack promises that net-assoc will bind all the
> subnets to the VPN, but due to opendaylight constraints, this will fail
> silently, i.e. this bug.
>
> Further down in the openstack docs however:
> To avoid any ambiguity on semantics in particular the context of processing
> associated to a Router (e.g. NAT or FWaaS), if a said Subnet in a Network is
> bound to a Router, this API does not allow to both associate the Network to
> an L3 BGPVPN and the Router to the same or to a distinct L3 BGPVPN.
>
> This is indeed in some way what you're saying, but not exactly. Network
> assoc should not happen if there is a router assoc. For opendaylight there
> is an internal router assoc so having a router means that network assoc will
> always fail.
>
> I think that this same paragraph that explains the mutual exclusion of
> network and router association implies that network assoc should work for
> subnets attached to routers that don't participate in assocs, which is the
> gist of this bug.
>
> > 2. create networks with subnets and instances, then the VPNs, followed by
> > “bgpvpn-net-assoc-create”. DO NOT add these subnets to the router via
> > “router-interface-add”.
> Yes, if we do not create routers this case works for Boron.

I totally agree with you. Due to ODL limitations, we are restricting ourselves here.
All along the implementation for Openstack/REST support for router/network(s) associations to VPN(s), this assumption was always taken into account.
I believe with this bug, we should look at enabling both:
a. L3 forwarding across subnets associated to the router.
b. L3 forwarding across network(s) associated to this VPN

Also, for associations/dissociations via REST APIs, we send out explicit detailed error logs, but for BGPVPN APIs, no error is being propagated. This also needs to be fixed.

Comment by Nikolas Hermanns [ 04/Apr/17 ]

Do we have progress on this bug?

Comment by Abhinav Gupta [ 04/Apr/17 ]

(In reply to Nikolas Hermanns from comment #8)
> Do we have progress on this bug?

I don't think so, this was in unassigned state until today, and today has been assigned to me.
I don't see any fixes having gone in to take care of this..

Comment by Nikolas Hermanns [ 04/Apr/17 ]

Ah ok, that is now problem. But thanks that you look into that!

Comment by Thomas Sounapoglou [ 02/Jan/18 ]

Hello, is there any news from this bug?

Comment by Abhinav Gupta [ 08/Nov/19 ]

Old bug, will reopen if seen again

Generated at Wed Feb 07 20:20:58 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.