2b8e492ca9
Enhances provider extension to support flat networks and VLANs on multiple physical networks. Implements blueprint provider-networks. To create a flat network using the CLI with admin rights: net-create --tenant_id <tenant-id> <net-name> --provider:network_type flat --provider:physical_network <physical-network> To create a VLAN network using the CLI with admin rights: net-create --tenant_id <tenant-id> <net-name> --provider:network_type vlan --provider:physical_network <physical-network> --provider:vlan_id <vlan-id> The provider extension is supported by the linuxbridge and openvswitch plugins and their agents [openvswitch phase 2 implementation is in-progress, and does not yet support flat networks or multiple interfaces]. Ranges of VLANs available on named physical networks for normal allocation are specified in the plugin's config file via the ListOpt syntax: network_vlan_ranges = <physical_network>:<vlan_min>:<vlan_max> The mapping of each named physical network to its physical network interface is specified (per-agent-host) in the agent's config file via the ListOpt syntax: physical_interface_mappings = <physical_network>:<physical_interface> See quantum/plugins/linuxbridge/README for details and examples of network_vlan_ranges and physical_interface_mappings usage. Also, bulk operations are enabled for the linuxbridge plugin. Change-Id: I93402bd5cc6316e9408ea71c3b3989d06898ee30
60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
# Copyright (c) 2012 OpenStack, LLC.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
# implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
import sqlalchemy as sa
|
|
|
|
from quantum.db import model_base
|
|
|
|
|
|
class NetworkState(model_base.BASEV2):
|
|
"""Represents state of vlan_id on physical network"""
|
|
__tablename__ = 'network_states'
|
|
|
|
physical_network = sa.Column(sa.String(64), nullable=False,
|
|
primary_key=True)
|
|
vlan_id = sa.Column(sa.Integer, nullable=False, primary_key=True,
|
|
autoincrement=False)
|
|
allocated = sa.Column(sa.Boolean, nullable=False)
|
|
|
|
def __init__(self, physical_network, vlan_id):
|
|
self.physical_network = physical_network
|
|
self.vlan_id = vlan_id
|
|
self.allocated = False
|
|
|
|
def __repr__(self):
|
|
return "<NetworkState(%s,%d,%s)>" % (self.physical_network,
|
|
self.vlan_id, self.allocated)
|
|
|
|
|
|
class NetworkBinding(model_base.BASEV2):
|
|
"""Represents binding of virtual network to physical_network and vlan_id"""
|
|
__tablename__ = 'network_bindings'
|
|
|
|
network_id = sa.Column(sa.String(36),
|
|
sa.ForeignKey('networks.id', ondelete="CASCADE"),
|
|
primary_key=True)
|
|
physical_network = sa.Column(sa.String(64), nullable=False)
|
|
vlan_id = sa.Column(sa.Integer, nullable=False)
|
|
|
|
def __init__(self, network_id, physical_network, vlan_id):
|
|
self.network_id = network_id
|
|
self.physical_network = physical_network
|
|
self.vlan_id = vlan_id
|
|
|
|
def __repr__(self):
|
|
return "<NetworkBinding(%s,%s,%d)>" % (self.network_id,
|
|
self.physical_network,
|
|
self.vlan_id)
|