API

Introduction

Neutron dynamic routing project adds the support for dynamic routing protocols in neutron. Using the ReST interface, a cloud administrator can define routing peers and advertise neutron routes outside the OpenStack domain.

Note

Currently, only the support for BGP dynamic routing protocol is available.

Data Model

New data models are defined for supporting routing protocols. Below models are defined for different protocols.

BGP

BGP Speaker

  • id The uuid of BGP Speaker.
  • name The name of BGP Speaker.
  • local_as The local AS value, ranges from 1 to 65535.
  • ip_version The ip address version for BGP Speaker. 4 by default.
  • peers The remote peer connection which supports BGP.
  • networks The tenant networks connected to the BGP Speaker.
  • advertise_floating_ip_host_routes Whether to enable or disable the advertisement of floating ip host routes by the BGP Speaker. True by default.
  • advertise_tenant_networks Whether to enable or disable the advertisement of tenant network routes by the BGP Speaker. True by default.

BGP Peer

  • id The uuid of BGP peer.
  • name The name of BGP peer.
  • peer_ip The IP address of BGP peer.
  • remote_as The remote AS value, ranges from 1 to 65535.
  • auth_type The authentication algorithm. Supported algorithms: none and md5, none by default.
  • password The authentication password for the specified authentication type.

ReST Interface

Different ReST interface are exposed for realizing different dynamic protocol functionality.

Only an administrator have the access to the exposed API’s.

BGP

BGP Speaker

Create

Issue a POST request to /v2.0/bgp-speakers with following JSON-encoded data to create a BGP Speaker:

{
   "bgp_speaker":{
      "ip_version":4,
      "local_as":"1000",
      "name":"bgp-speaker"
   }
}

Response body:

{
   "bgp_speaker":{
      "peers":[
      ],
      "name":"bgp-speaker",
      "tenant_id":"34a6e17a48cf414ebc890367bf42266b",
      "local_as":1000,
      "advertise_tenant_networks":true,
      "networks":[
      ],
      "ip_version":4,
      "advertise_floating_ip_host_routes":true,
      "id":"5e08db80-db77-4b5c-a56d-dbca0b284f2c"
   }
}

Return code: 201
List

Issue a GET request to /v2.0/bgp-speakers to retrieve this list of available BGP Speakers.

Response body:

{
   "bgp_speakers":[
      {
         "peers":[
         ],
         "name":"bgp-speaker-1",
         "tenant_id":"34a6e17a48cf414ebc890367bf42266b",
         "local_as":1001,
         "advertise_tenant_networks":true,
         "networks":[
         ],
         "ip_version":4,
         "advertise_floating_ip_host_routes":true,
         "id":"5e08db80-db77-4b5c-a56d-dbca0b284f2c"
      },
      {
         "peers":[
         ],
         "name":"bgp-speaker",
         "tenant_id":"34a6e17a48cf414ebc890367bf42266b",
         "local_as":1000,
         "advertise_tenant_networks":true,
         "networks":[
         ],
         "ip_version":4,
         "advertise_floating_ip_host_routes":true,
         "id":"b759b2a1-27f4-4a6b-bb61-f2c9a22c9902"
      }
   ]
}

Return code: 200
Show

Issue a GET request to /v2.0/bgp-speakers/<bgp-speaker-id> to retrieve the detail about a specific BGP Speaker.

Response body:

{
   "bgp_speaker":{
      "peers":[
      ],
      "name":"bgp-speaker",
      "tenant_id":"34a6e17a48cf414ebc890367bf42266b",
      "local_as":1000,
      "advertise_tenant_networks":true,
      "networks":[
      ],
      "ip_version":4,
      "advertise_floating_ip_host_routes":true,
      "id":"b759b2a1-27f4-4a6b-bb61-f2c9a22c9902"
   }
}

Return code: 200
Update

Issue PUT request to /v2.0/bgp-speakers/<bgp-speaker-id> to update a specific BGP Speaker. Following attributes can be updated.

  • name The name of BGP Speaker.
  • advertise_floating_ip_host_routes Whether to enable or disable the advertisement of floating ip host routes by the BGP Speaker. True by default.
  • advertise_tenant_networks Whether to enable or disable the advertisement of tenant network routes by the BGP Speaker. True by default.
Delete

Issue DELETE request to /v2.0/bgp-speakers/<bgp-speaker-id> to delete a specific BGP Speaker.

No response body

Return code: 204

BGP Peer

Create

Issue a POST request to /v2.0/bgp-peers with following JSON-encoded data to create a BGP peer:

{
   "bgp_peer":{
      "auth_type":"none",
      "remote_as":"1001",
      "name":"bgp-peer",
      "peer_ip":"10.0.0.3"
   }
}

Response body:

{
   "bgp_peer":{
      "auth_type":"none",
      "remote_as":"1001",
      "name":"bgp-peer",
      "tenant_id":"34a6e17a48cf414ebc890367bf42266b",
      "peer_ip":"10.0.0.3",
      "id":"a7193581-a31c-4ea5-8218-b3052758461f"
   }
}

Return code: 201
List

Issue a GET request to /v2.0/bgp-peers to retrieve the list of available BGP peers.

Response body:

{
   "bgp_peers":[
      {
         "auth_type":"none",
         "remote_as":1001,
         "name":"bgp-peer",
         "tenant_id":"34a6e17a48cf414ebc890367bf42266b",
         "peer_ip":"10.0.0.3",
         "id":"a7193581-a31c-4ea5-8218-b3052758461f"
      }
   ]
}

Return code: 200
Show

Issue a GET request to /v2.0/bgp-peers/<bgp-peer-id> to retrieve the detail about a specific BGP peer.

Response body:

{
   "bgp_peer":{
      "auth_type":"none",
      "remote_as":1001,
      "name":"bgp-peer",
      "tenant_id":"34a6e17a48cf414ebc890367bf42266b",
      "peer_ip":"10.0.0.3",
      "id":"a7193581-a31c-4ea5-8218-b3052758461f"
   }
}

Return code: 200
Update

Issue PUT request to /v2.0/bgp-peers/<bgp-peer-id> to update a specific BGP peer. Following attributes can be updated.

  • name The name of BGP peer.
  • password The authentication password.
Delete

Issue DELETE request to /v2.0/bgp-peers/<bgp-peer-id> to delete a specific BGP peer.

No response body

Return code: 204

BGP Speaker and Peer binding

Add BGP Peer to a BGP Speaker

Issue a PUT request to /v2.0/bgp-speakers/<bgp-speaker-id>/add-bgp-peer to bind the BGP peer to the specified BGP Seaker with following JSON-encoded data:

{
   "bgp_peer_id":"a7193581-a31c-4ea5-8218-b3052758461f"
}

Response body: ::

{
   "bgp_peer_id":"a7193581-a31c-4ea5-8218-b3052758461f"
}

Return code: 200
Remove BGP Peer from a BGP Speaker

Issue a DELETE request with following data to /v2.0/bgp-speakers/<bgp-speaker-id>/remove-bgp-peer to unbind the BGP peer:

{
   "bgp_peer_id":"a7193581-a31c-4ea5-8218-b3052758461f"
}

No response body

Return code: 200

BGP Speaker and Network binding

Add Network to a BGP Speaker

Issue a PUT request with following data to /v2.0/bgp-speakers/<bgp-speaker-id>/add_gateway_network to add a network to the specified BGP speaker:

{
   "network_id":"f2269b61-6755-4174-8f64-5e318617b204"
}

Response body:

{
   "network_id":"f2269b61-6755-4174-8f64-5e318617b204"
}

Return code: 200
Delete Network from a BGP Speaker

Issue a DELETE request with following data to /v2.0/bgp-speakers/<bgp-speaker-id>/remove_gateway_network to delete a network from a specified BGP speaker.

No response body

Return code: 200

BGP Speaker Advertised Routes

List routes advertised by a BGP Speaker

Issue GET request to `/v2.0/bgp-speakers/<bgp-speaker-id>/get_advertised_routes to list all routes advertised by the specified BGP Speaker.

Response body:

{
   "advertised_routes":[
      {
         "cidr":"192.168.10.0/24",
         "nexthop":"10.0.0.1"
      }
   ]
}

Return code: 200

BGP Speaker and Dynamic Routing Agent interaction

Add BGP Speaker to a Dynamic Routing Agent

Issue a POST request to /v2.0/agents/<bgp-agent-id>/bgp-drinstances to add a BGP Speaker to the specified dynamic routing agent. The following is the request body:

{
  "bgp_speaker_id": "5639072c-49eb-480a-9f11-953386589bc8"
}

No response body

Return code: 201
List BGP speakers hosted by a Dynamic Routing Agent

Issue a GET request to /v2.0/agents/<bgp-dragent-id>/bgp-drinstances to list all BGP Seakers hosted on the specified dynamic routing agent.

Response body:

{
   "bgp_speakers":[
      {
         "peers":[
         ],
         "name":"bgp-speaker",
         "tenant_id":"34a6e17a48cf414ebc890367bf42266b",
         "local_as":1000,
         "advertise_tenant_networks":true,
         "networks":[
         ],
         "ip_version":4,
         "advertise_floating_ip_host_routes":true,
         "id":"b759b2a1-27f4-4a6b-bb61-f2c9a22c9902"
      }
   ]
}

Return code: 200
List Dynamic Routing Agents hosting a specific BGP Speaker

Issue a GET request to /v2.0/bgp-speakers/<bgp-speaker-id>/bgp-dragents to list all BGP dynamic agents which are hosting the specified BGP Speaker.

Response body:

{
   "agents":[
      {
         "binary":"neutron-bgp-dragent",
         "description":null,
         "admin_state_up":true,
         "heartbeat_timestamp":"2016-05-17 03:05:12",
         "availability_zone":null,
         "alive":true,
         "topic":"bgp_dragent",
         "host":"yangyubj-virtual-machine",
         "agent_type":"BGP dynamic routing agent",
         "resource_versions":{
         },
         "created_at":"2016-05-09 07:38:00",
         "started_at":"2016-05-11 09:06:13",
         "id":"af216618-29d3-4ee7-acab-725bdc90e614",
         "configurations":{
            "advertise_routes":0,
            "bgp_peers":0,
            "bgp_speakers":1
         }
      }
   ]
}

Return code: 200
Delete BGP Speaker from a Dynamic Routing Agent

Issue a DELETE request to /v2.0/agents/<bgp-agent-id>/bgp-drinstances/<bgp-speaker-id> to delete the BGP Speaker hosted by the specified dynamic routing agent.

No response body

Return code: 204

Reference

None