BGP Speaker Insertion Model on Routers

This spec describes an extension to associate a BGP speaker to a router.

For detailed explanations of the BGP implementation of networking-midonet, refer to the BGP Operational Guide [1].

Problem Description

MidoNet BGP model does not match the ‘bgp’ extension model of Neutron in some critical ways. Namely, in MidoNet, BGP must be configured on a router whereas in Neutron, BGP is configured independently. There is no way to associate a BGP speaker to a router in the Neutron’s ‘bgp’ extension model.

Proposed Change

In order to have MidoNet implement ‘bgp’ extension API of Neutron, ‘bgp-speaker-router-insertion’ vendor extension API is defined to track the associations between BGP speakers and routers.

For each BGP speaker, exactly one router is associated. The IP address used by the BGP speaker is the IP address on the router port that is on the same subnet as the BGP peer IP.

With this mode, the following operations no longer become applicable:

  • add_gateway_network
  • delete_gateway_network

Invoking these operations on a BGP speaker that has a router associated results in an error.

Also, the following fields no longer become applicable:

  • advertise_floating_ip_host_routes
  • advertise_tenant_networks

The values set in these fields are ignored.

Since ‘bgp-speaker-router-insertion’ is a vendor extension, it works only with networking-midonet as the plugin. However, if this extension becomes part of neutron-dynamic-routing project, it will be expected to work with the reference implementation, dr-agents. There should be nothing in this design that should interfere with the current implementation of dr-agents, including its HA capabilities.

Data Model Impact

‘bgp_speaker_router_associations’ table is created:

Attribute name Type Description
bgp_speaker_id uuid BGP speaker id
router_id uuid Associated router

‘bgp_speaker_id’ is the primary key of the table. Both ‘bgp_speaker_id’ and ‘router_id’ have foreign key constraints set to bgp_speakers and routers tables, respectively.

REST API Impact

RESOURCE_ATTRIBUTE_MAP = {
  'bgp-speakers': {
      'logical_router': {'allow_post': True, 'allow_put': False,
                         'validate': {'type:uuid': None},
                         'is_visible': True, 'default': None},
  }
}

Security Impact

None

Other End User Impact

Neutron CLI provides support for ‘logical_router’ field as follows:

neutron bgp-speaker-create [--tenant-id TENANT_ID] --local-as LOCAL_AS
                           [--ip-version {4,6}]
                           [--logical-router ROUTER]
                           NAME

--logical-router ROUTER
    Router ID or name to associate BGP speaker with.

Performance Impact

None

IPv6 Impact

None

Other Deployer Impact

None

Developer Impact

None

Documentation Impact

MidoNet Operational Guide will be updated to include the new attribute added to the BGP speaker model.