Extra Routes API

This document describes MidoNet’s implementation of extra routes Neutron extension API.

Problem Description

MidoNet plugin has not implemented extra routes extension API, and without it, MidoNet’s routing table management feature could not be exposed.

Proposed Change

MidoNet plugin implements the extra routes extension. Current design of extra routes, however, only contains ‘destination’ and ‘nexthop’ fields, representing the destination CIDR to match on the packet and the next hop gateway IP address. MidoNet plugin extends the current extra route API to add more fields in the route model to provide more detailed management of the routing table.

Plugin

Add ‘extraroute’ in the supported_extension_aliases list.

Extend ‘extraroute’ extension and add a ‘source’ field, and validate ‘source’ the same way ‘destination’ is validated.

REST API

Router

Extra routes extension adds the ‘routes’ field in the router requests and responses, which is a list of route objects where each route consists of:

Attribute Name Type POST/ PUT Required Description
destination string (CIDR) PUT Yes

CIDR to match on the packet’s destination ip

Default: 0.0.0.0/0

source string (CIDR) PUT No

CIDR to match on the packet’s source ip

Default: 0.0.0.0/0

nexthop string (CIDR) PUT Yes IP of the next hop gateway

DB Model

AdvancedExtraRoute

table name: midonet_router_routes

‘router_routes’ table in Neutron is used to store the extra routes. In addition, to store the midonet-specific field, ‘source’, ‘midonet_router_routes’ table is introduced:

Name Type Description
source String(64) Source CIDR to match on
router_id String(36) ID of the router the route belongs to

‘router_id’ has a foreign key constraint defined for ‘id’ column of the ‘routers’ table.

Client

The CLI command to update a router accepts the following new argument:

::
neutron router-update ROUTER_ID –routes type=dict list=true
[–source SOURCE]
–source SOURCE:
source CIDR of the route

Documentation

Operational Guide must be updated to explain the ‘source’ field added in the extra route extension.