コード例 #1
0
from oslo_log import helpers as log_helpers
from oslo_log import log as logging
from sqlalchemy import or_

from neutron.common import utils
from neutron.conf.db import dvr_mac_db
from neutron.conf.db import l3_dvr_db
from neutron.db import models_v2
from neutron.extensions import dvr as ext_dvr
from neutron.objects import router
from neutron.plugins.ml2 import models as ml2_models

LOG = logging.getLogger(__name__)

dvr_mac_db.register_db_dvr_mac_opts()
l3_dvr_db.register_db_l3_dvr_opts()


def get_ports_query_by_subnet_and_ip(context, subnet, ip_addresses=None):
    query = context.session.query(models_v2.Port)
    query = query.join(models_v2.IPAllocation)
    query = query.filter(models_v2.Port.id == models_v2.IPAllocation.port_id,
                         models_v2.IPAllocation.subnet_id == subnet)
    if ip_addresses:
        query = query.filter(
            models_v2.IPAllocation.ip_address.in_(ip_addresses))
    return query


@registry.has_registry_receivers
class DVRDbMixin(ext_dvr.DVRMacAddressPluginBase):
コード例 #2
0
from oslo_log import log as logging
from sqlalchemy import or_

from neutron.common import utils as n_utils
from neutron.conf.db import l3_dvr_db as l3_dvr_db_conf
from neutron.db import agentschedulers_db
from neutron.db import l3_agentschedulers_db as l3agent_sch_db
from neutron.db import l3_dvr_db
from neutron.db.models import l3 as l3_models
from neutron.db import models_v2
from neutron.objects import l3agent as rb_obj
from neutron.plugins.ml2 import db as ml2_db
from neutron.plugins.ml2 import models as ml2_models

LOG = logging.getLogger(__name__)
l3_dvr_db_conf.register_db_l3_dvr_opts()


class L3_DVRsch_db_mixin(l3agent_sch_db.L3AgentSchedulerDbMixin):
    """Mixin class for L3 DVR scheduler.

    DVR currently supports the following use cases:

     - East/West (E/W) traffic between VMs: this is handled in a
       distributed manner across Compute Nodes without a centralized element.
       This includes E/W traffic between VMs on the same Compute Node.
     - North/South traffic for Floating IPs (FIP N/S): this is supported on the
       distributed routers on Compute Nodes when there is external network
       connectivity and on centralized nodes when the port is not bound or when
       the agent is configured as 'dvr_no_external'.
     - North/South traffic for SNAT (SNAT N/S): this is supported via a
コード例 #3
0
ファイル: l3_dvr_db.py プロジェクト: eayunstack/neutron
from neutron.db import api as db_api
from neutron.db import l3_attrs_db
from neutron.db import l3_db
from neutron.db.models import allowed_address_pair as aap_models
from neutron.db import models_v2
from neutron.extensions import l3
from neutron.ipam import utils as ipam_utils
from neutron.objects import agent as ag_obj
from neutron.objects import base as base_obj
from neutron.objects import l3agent as rb_obj
from neutron.objects import router as l3_obj
from neutron.plugins.common import utils as p_utils


LOG = logging.getLogger(__name__)
l3_dvr_db.register_db_l3_dvr_opts()


@registry.has_registry_receivers
class DVRResourceOperationHandler(object):
    """Contains callbacks for DVR operations.

    This can be implemented as a mixin or can be intantiated as a stand-alone
    object. Either way, it will subscribe itself to the relevant L3 events and
    use the plugin directory to find the L3 plugin to make calls to it as
    necessary.
    """

    @property
    def l3plugin(self):
        return directory.get_plugin(plugin_constants.L3)