← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 2064120] [NEW] [RFE] BGP Dynamic Routing for IPv4 AND IPv6 routes not possible with just one dragent (really make use of MP-BGP or support multiple BGP speakers / sessions per dragent)

 

Public bug reported:

When setting up Neutron BGP Dynamic Routing to advertise IPv4 floating
IPs and also IPv6 tenant networks I ran into some issues.

I then asked on the ML [1] and also found an older thread [2] discussing
the advertising of IPv6 routes (e.g. from tenant networks). There Sean
mentioned [4] that even with MP-BGP support [3] it's required to have
two BGP speakers. While [3] means IPv4 or IPv6 can be used to establish
the BGP session itself to then advertise routes for either address
family, it's not possible to advertise IPv4 AND IPv6 routes via the same
session.


To cut to the chase of this bug ....

It's very common to use distinct (read: NON multi protocol) BGP sessions
to exchange routes for IPv4 and IPv6 individually and this poses no
issue in itself.

The problem with Neutron is though, that the os_ken dragent driver only
supports one BGP speaker [5] per agent. This leads to only one of the
BGP speakers involved (one with `ip_version=4` the other with
`ip_version=6`) running per individual (control plane, networking) host.
So on a single control plane host it seems not even possible to setup
and use BGP dynamic routing for IPv4 and IPv6 routes.


I see two options for improvement here:


1) Enabling a BGP speaker to have more than one address family (dragent driver already has MP-BGP support via [3]), so the query fetching the routes [6] simply(TM) does `ip_version in ('4','6')`. There also is a bug open [7] about the filtering currently being broken.

2) Somehow get more than one BGP speaker per dragent working by ...
  a) ... extending the driver to host more than one BGP speaker
  b) ... extending dragent to have more than one driver instance



[1] https://lists.openstack.org/archives/list/openstack-discuss@xxxxxxxxxxxxxxxxxxx/thread/ZRDT2W53GWSB5DPCDGW6CJWFULSGKU6Z/
[2] https://lists.openstack.org/archives/list/openstack-discuss@xxxxxxxxxxxxxxxxxxx/thread/CM3MOEIAMJ7YSVL5FRDCL5DIT5PYGT2R/#CM3MOEIAMJ7YSVL5FRDCL5DIT5PYGT2R
[3] https://review.opendev.org/c/openstack/neutron-dynamic-routing/+/608302
[4] https://lists.openstack.org/archives/list/openstack-discuss@xxxxxxxxxxxxxxxxxxx/message/MQPEXJFQNQLI2KNJYP3O5CGF5COJR7Y7/
[5] https://github.com/openstack/neutron-dynamic-routing/blob/ffaaf5a25d846feadc589b83281c783b10ae7684/neutron_dynamic_routing/services/bgp/agent/driver/os_ken/driver.py#L77
[6] https://github.com/openstack/neutron-dynamic-routing/blob/ffaaf5a25d846feadc589b83281c783b10ae7684/neutron_dynamic_routing/db/bgp_db.py#L859
[7] https://bugs.launchpad.net/neutron/+bug/2023632

** Affects: neutron
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/2064120

Title:
  [RFE] BGP Dynamic Routing for IPv4 AND IPv6 routes not possible with
  just one dragent (really make use of MP-BGP or support multiple BGP
  speakers / sessions per dragent)

Status in neutron:
  New

Bug description:
  When setting up Neutron BGP Dynamic Routing to advertise IPv4 floating
  IPs and also IPv6 tenant networks I ran into some issues.

  I then asked on the ML [1] and also found an older thread [2]
  discussing the advertising of IPv6 routes (e.g. from tenant networks).
  There Sean mentioned [4] that even with MP-BGP support [3] it's
  required to have two BGP speakers. While [3] means IPv4 or IPv6 can be
  used to establish the BGP session itself to then advertise routes for
  either address family, it's not possible to advertise IPv4 AND IPv6
  routes via the same session.

  
  To cut to the chase of this bug ....

  It's very common to use distinct (read: NON multi protocol) BGP
  sessions to exchange routes for IPv4 and IPv6 individually and this
  poses no issue in itself.

  The problem with Neutron is though, that the os_ken dragent driver
  only supports one BGP speaker [5] per agent. This leads to only one of
  the BGP speakers involved (one with `ip_version=4` the other with
  `ip_version=6`) running per individual (control plane, networking)
  host. So on a single control plane host it seems not even possible to
  setup and use BGP dynamic routing for IPv4 and IPv6 routes.


  I see two options for improvement here:

  
  1) Enabling a BGP speaker to have more than one address family (dragent driver already has MP-BGP support via [3]), so the query fetching the routes [6] simply(TM) does `ip_version in ('4','6')`. There also is a bug open [7] about the filtering currently being broken.

  2) Somehow get more than one BGP speaker per dragent working by ...
    a) ... extending the driver to host more than one BGP speaker
    b) ... extending dragent to have more than one driver instance



  
  [1] https://lists.openstack.org/archives/list/openstack-discuss@xxxxxxxxxxxxxxxxxxx/thread/ZRDT2W53GWSB5DPCDGW6CJWFULSGKU6Z/
  [2] https://lists.openstack.org/archives/list/openstack-discuss@xxxxxxxxxxxxxxxxxxx/thread/CM3MOEIAMJ7YSVL5FRDCL5DIT5PYGT2R/#CM3MOEIAMJ7YSVL5FRDCL5DIT5PYGT2R
  [3] https://review.opendev.org/c/openstack/neutron-dynamic-routing/+/608302
  [4] https://lists.openstack.org/archives/list/openstack-discuss@xxxxxxxxxxxxxxxxxxx/message/MQPEXJFQNQLI2KNJYP3O5CGF5COJR7Y7/
  [5] https://github.com/openstack/neutron-dynamic-routing/blob/ffaaf5a25d846feadc589b83281c783b10ae7684/neutron_dynamic_routing/services/bgp/agent/driver/os_ken/driver.py#L77
  [6] https://github.com/openstack/neutron-dynamic-routing/blob/ffaaf5a25d846feadc589b83281c783b10ae7684/neutron_dynamic_routing/db/bgp_db.py#L859
  [7] https://bugs.launchpad.net/neutron/+bug/2023632

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/2064120/+subscriptions