components/openstack/neutron/files/agent/evs_l3_agent.py
author Devjani Ray <devjani.ray@oracle.com>
Fri, 05 Feb 2016 17:54:17 -0500
changeset 5405 66fd59fecd68
parent 4975 6445e44cfccd
child 5579 48110757c6c6
permissions -rw-r--r--
PSARC 2015/535 OpenStack service updates for Kilo PSARC 2015/458 aioeventlet - asyncio event loop scheduling callbacks in eventlet PSARC 2015/460 msgpack - C/Python bindings for MessagePack (de)serializer data PSARC 2015/466 openstackclient - OpenStack Command-line Client PSARC 2015/467 oslo.versionedobjects - Oslo Versioned Objects library PSARC 2015/468 pint - A physical quantities module PSARC 2015/469 pysaml2 - A pure Python implementation of SAML2 PSARC 2015/471 semantic_version - A library implementing the 'SemVer' scheme PSARC 2015/472 testresources - PyUnit extension for managing expensive test resources PSARC 2015/473 testscenarios - Extensions to Python unittest to support scenarios PSARC 2015/474 trollius - Port of the Tulip project (asyncio module, PEP 3156) on Python 2 PSARC 2015/475 urllib3 - HTTP library with thread-safe connection pooling, file post, and more PSARC 2015/520 oslo.concurrency - Oslo Concurrency library PSARC 2015/521 oslo.log - Oslo Logging Configuration library PSARC 2015/529 oslo.policy - Oslo Policy library PSARC 2015/530 psutil - Python system and process utilities PSARC 2015/538 fixtures - Python module to support reusable state for writing clean tests PSARC 2015/539 sqlparse - An SQL parser module for Python PSARC 2016/017 extras - Useful extra utilities for Python PSARC 2016/018 linecache2 - Port of the standard linecache module PSARC 2016/019 python-mimeparse - Basic functions for parsing mime-types PSARC 2016/020 testtools - Extensions to the Python unit testing framework PSARC 2016/021 traceback2 - Port of the standard traceback module PSARC 2016/014 OpenStack Cinder NFS driver for Solaris 22384068 OpenStack service updates for Kilo (Umbrella) 21974208 The Python module msgpack should be added to Userland 22010630 The Python trollius module should be added to Userland 22011755 The Python module pint should be added to Userland 22012256 The Python aioeventlet module should be added to Userland 22012282 The Python oslo.versionedobjects module should be added to Userland 22012317 The Python semantic_version module should be added to Userland 22012321 The Python testresources module should be added to Userland 22012329 The Python testscenarios module should be added to Userland 22012336 The Python urllib3 module should be added to Userland 22012343 The Python openstackclient module should be added to Userland 22299389 The Python oslo.concurrency module should be added to Userland 22299409 The Python oslo.log module should be added to Userland 22299418 The Python oslo.policy module should be added to Userland 22299469 The Python psutil module should be added to Userland 22337793 The Python sqlparse module should be added to Userland 22338325 The Python fixtures module should be added to Userland 22535728 The Python testtools module should be added to Userland 22535739 The Python extras module should be added to Userland 22535748 The Python linecache2 module should be added to Userland 22535753 The Python traceback2 module should be added to Userland 22535760 The Python python-mimeparse module should be added to Userland 18961001 Image filtering does not function as expected 21678935 NFS for Cinder in Solaris OpenStack 22548630 derived manifest should not enforce presence of global when installing from UAR 22629795 problem in SERVICE/KEYSTONE
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     1
# vim: tabstop=4 shiftwidth=4 softtabstop=4
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     2
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2174
diff changeset
     3
# Copyright 2012 VMware, Inc.  All rights reserved.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     4
#
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
     5
# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     6
#
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     7
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     8
#    not use this file except in compliance with the License. You may obtain
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     9
#    a copy of the License at
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    10
#
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    11
#         http://www.apache.org/licenses/LICENSE-2.0
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    12
#
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    13
#    Unless required by applicable law or agreed to in writing, software
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    14
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    15
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    16
#    License for the specific language governing permissions and limitations
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    17
#    under the License.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    18
#
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    19
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    20
"""
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
    21
Based off generic l3_agent (neutron/agent/l3_agent) code
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    22
"""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    23
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2174
diff changeset
    24
import errno
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
    25
import netaddr
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
    26
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    27
from oslo.config import cfg
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    28
from oslo_log import log as logging
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    29
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    30
from neutron.agent.l3 import agent as l3_agent
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    31
from neutron.agent.l3 import router_info as router
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
    32
from neutron.agent.linux import utils
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
    33
from neutron.agent.solaris import interface
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    34
from neutron.agent.solaris import ipfilters_manager
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
    35
from neutron.agent.solaris import net_lib
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2174
diff changeset
    36
from neutron.agent.solaris import ra
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    37
from neutron.callbacks import events
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    38
from neutron.callbacks import registry
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    39
from neutron.callbacks import resources
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
    40
from neutron.common import constants as l3_constants
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    41
from neutron.common import exceptions as n_exc
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2174
diff changeset
    42
from neutron.common import utils as common_utils
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    43
from oslo_utils import importutils
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    44
from oslo_log import log as logging
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    45
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    46
import neutron_vpnaas.services.vpn.agent as neutron_vpnaas
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    47
from neutron_vpnaas.extensions import vpnaas
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    48
from neutron_vpnaas.services.vpn import vpn_service
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    49
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    50
LOG = logging.getLogger(__name__)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    51
INTERNAL_DEV_PREFIX = 'l3i'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    52
EXTERNAL_DEV_PREFIX = 'l3e'
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
    53
FLOATING_IP_CIDR_SUFFIX = '/32'
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    54
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    55
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    56
class SolarisRouterInfo(router.RouterInfo):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2174
diff changeset
    57
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    58
    def __init__(self, router_id, router, agent_conf, interface_driver,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    59
                 use_ipv6=False):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    60
        super(SolarisRouterInfo, self).__init__(router_id, router, agent_conf,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    61
                                                interface_driver, use_ipv6)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    62
        self.ipfilters_manager = ipfilters_manager.IPfiltersManager()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    63
        self.iptables_manager = None
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    64
        self.remove_route = False
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
    65
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    66
    def initialize(self, process_monitor):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    67
        """Initialize the router on the system.
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2174
diff changeset
    68
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    69
        This differs from __init__ in that this method actually affects the
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    70
        system creating namespaces, starting processes, etc.  The other merely
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    71
        initializes the python object.  This separates in-memory object
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    72
        initialization from methods that actually go do stuff to the system.
1987
6fa18b7a0af6 19158668 associating a new floating ip removes existing ipnat rules and re-adds them
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1977
diff changeset
    73
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    74
        :param process_monitor: The agent's process monitor instance.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    75
        """
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    76
        self.process_monitor = process_monitor
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    77
        self.radvd = ra.NDPD(self.router_id, self.get_internal_device_name)
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
    78
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    79
    def get_internal_device_name(self, port_id):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    80
        # Because of the way how dnsmasq works on Solaris, the length
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    81
        # of datalink name cannot exceed 16 (includes terminating nul
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    82
        # character). So, the linkname can only have 15 characters and
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    83
        # the last two characters are set aside for '_0'. So, we only
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    84
        # have 13 characters left.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    85
        dname = (INTERNAL_DEV_PREFIX + port_id)[:13]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    86
        dname += '_0'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    87
        return dname.replace('-', '_')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    88
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    89
    def get_external_device_name(self, port_id):
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
    90
        # please see the comment above
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    91
        dname = (EXTERNAL_DEV_PREFIX + port_id)[:13]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    92
        dname += '_0'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    93
        return dname.replace('-', '_')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    94
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    95
    def routes_updated(self):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    96
        pass
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    97
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    98
    def _get_existing_devices(self):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    99
        return net_lib.Datalink.show_vnic()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   100
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   101
    def internal_network_added(self, port):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   102
        internal_dlname = self.get_internal_device_name(port['id'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   103
        # driver just returns if datalink and IP interface already exists
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   104
        self.driver.plug(port['tenant_id'], port['network_id'], port['id'],
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   105
                         internal_dlname)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   106
        ip_cidrs = common_utils.fixed_ip_cidrs(port['fixed_ips'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   107
        self.driver.init_l3(internal_dlname, ip_cidrs)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   108
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   109
        # Since we support shared router model, we need to block the new
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   110
        # internal port from reaching other tenant's ports
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   111
        block_pname = self._get_ippool_name(port['mac_address'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   112
        self.ipfilters_manager.add_ippool(block_pname, None)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   113
        if self.agent_conf.allow_forwarding_between_networks:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   114
            # If allow_forwarding_between_networks is set, then we need to
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   115
            # allow forwarding of packets between same tenant's ports.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   116
            allow_pname = self._get_ippool_name(port['mac_address'], '0')
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   117
            self.ipfilters_manager.add_ippool(allow_pname, None)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   118
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   119
        # walk through the other internal ports and retrieve their
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   120
        # cidrs and at the same time add the new internal port's
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   121
        # cidr to them
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   122
        port_subnet = port['subnets'][0]['cidr']
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   123
        block_subnets = []
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   124
        allow_subnets = []
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   125
        for internal_port in self.internal_ports:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   126
            if internal_port['mac_address'] == port['mac_address']:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   127
                continue
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   128
            if (self.agent_conf.allow_forwarding_between_networks and
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   129
                    internal_port['tenant_id'] == port['tenant_id']):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   130
                allow_subnets.append(internal_port['subnets'][0]['cidr'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   131
                # we need to add the port's subnet to this internal_port's
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   132
                # allowed_subnet_pool
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   133
                iport_allow_pname = \
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   134
                    self._get_ippool_name(internal_port['mac_address'], '0')
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   135
                self.ipfilters_manager.add_ippool(iport_allow_pname,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   136
                                                  [port_subnet])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   137
            else:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   138
                block_subnets.append(internal_port['subnets'][0]['cidr'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   139
                iport_block_pname = \
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   140
                    self._get_ippool_name(internal_port['mac_address'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   141
                self.ipfilters_manager.add_ippool(iport_block_pname,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   142
                                                  [port_subnet])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   143
        # update the new port's pool with other ports' subnet
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   144
        self.ipfilters_manager.add_ippool(block_pname, block_subnets)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   145
        if self.agent_conf.allow_forwarding_between_networks:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   146
            self.ipfilters_manager.add_ippool(allow_pname, allow_subnets)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   147
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   148
        # now setup the IPF rules
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   149
        rules = ['block in quick on %s from %s to pool/%d' %
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   150
                 (internal_dlname, port_subnet, block_pname)]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   151
        # pass in packets between networks that belong to same tenant
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   152
        if self.agent_conf.allow_forwarding_between_networks:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   153
            rules.append('pass in quick on %s from %s to pool/%d' %
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   154
                         (internal_dlname, port_subnet, allow_pname))
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   155
        # if the external gateway is already setup for the shared router,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   156
        # then we need to add Policy Based Routing (PBR) for this internal
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   157
        # network
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   158
        ex_gw_port = self.ex_gw_port
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   159
        ex_gw_ip = (ex_gw_port['subnets'][0]['gateway_ip']
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   160
                    if ex_gw_port else None)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   161
        if ex_gw_ip:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   162
            external_dlname = self.get_external_device_name(ex_gw_port['id'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   163
            rules.append('pass in on %s to %s:%s from any to !%s' %
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   164
                         (internal_dlname, external_dlname, ex_gw_ip,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   165
                          port_subnet))
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   166
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   167
        ipversion = netaddr.IPNetwork(port_subnet).version
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   168
        self.ipfilters_manager.add_ipf_rules(rules, ipversion)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   169
        if self.agent_conf.enable_metadata_proxy and ipversion == 4:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   170
            rdr_rule = ['rdr %s 169.254.169.254/32 port 80 -> %s port %d tcp' %
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   171
                        (internal_dlname, port['fixed_ips'][0]['ip_address'],
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   172
                         self.agent_conf.metadata_port)]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   173
            self.ipfilters_manager.add_nat_rules(rdr_rule)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   174
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   175
    def internal_network_removed(self, port):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   176
        internal_dlname = self.get_internal_device_name(port['id'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   177
        port_subnet = port['subnets'][0]['cidr']
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   178
        # remove all the IP filter rules that we added during
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   179
        # internal network addition
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   180
        block_pname = self._get_ippool_name(port['mac_address'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   181
        rules = ['block in quick on %s from %s to pool/%d' %
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   182
                 (internal_dlname, port_subnet, block_pname)]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   183
        if self.agent_conf.allow_forwarding_between_networks:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   184
            allow_pname = self._get_ippool_name(port['mac_address'], '0')
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   185
            rules.append('pass in quick on %s from %s to pool/%d' %
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   186
                         (internal_dlname, port_subnet, allow_pname))
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   187
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   188
        # remove all the IP filter rules that we added during
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   189
        # external network addition
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   190
        ex_gw_port = self.ex_gw_port
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   191
        ex_gw_ip = (ex_gw_port['subnets'][0]['gateway_ip']
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   192
                    if ex_gw_port else None)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   193
        if ex_gw_ip:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   194
            external_dlname = self.get_external_device_name(ex_gw_port['id'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   195
            rules.append('pass in on %s to %s:%s from any to !%s' %
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   196
                         (internal_dlname, external_dlname, ex_gw_ip,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   197
                          port_subnet))
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   198
        ipversion = netaddr.IPNetwork(port['subnets'][0]['cidr']).version
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   199
        self.ipfilters_manager.remove_ipf_rules(rules, ipversion)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   200
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   201
        # remove the ippool
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   202
        self.ipfilters_manager.remove_ippool(block_pname, None)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   203
        if self.agent_conf.allow_forwarding_between_networks:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   204
            self.ipfilters_manager.remove_ippool(allow_pname, None)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   205
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   206
        for internal_port in self.internal_ports:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   207
            if (self.agent_conf.allow_forwarding_between_networks and
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   208
                    internal_port['tenant_id'] == port['tenant_id']):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   209
                iport_allow_pname = \
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   210
                    self._get_ippool_name(internal_port['mac_address'], '0')
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   211
                self.ipfilters_manager.remove_ippool(iport_allow_pname,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   212
                                                     [port_subnet])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   213
            else:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   214
                iport_block_pname = \
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   215
                    self._get_ippool_name(internal_port['mac_address'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   216
                self.ipfilters_manager.remove_ippool(iport_block_pname,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   217
                                                     [port_subnet])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   218
        if self.agent_conf.enable_metadata_proxy and ipversion == 4:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   219
            rdr_rule = ['rdr %s 169.254.169.254/32 port 80 -> %s port %d tcp' %
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   220
                        (internal_dlname, port['fixed_ips'][0]['ip_address'],
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   221
                         self.agent_conf.metadata_port)]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   222
            self.ipfilters_manager.remove_nat_rules(rdr_rule)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   223
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   224
        if net_lib.Datalink.datalink_exists(internal_dlname):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   225
            self.driver.fini_l3(internal_dlname)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   226
            self.driver.unplug(internal_dlname)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   227
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   228
    def _process_internal_ports(self):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   229
        existing_port_ids = set([p['id'] for p in self.internal_ports])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   230
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   231
        internal_ports = self.router.get(l3_constants.INTERFACE_KEY, [])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   232
        current_port_ids = set([p['id'] for p in internal_ports
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   233
                                if p['admin_state_up']])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   234
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   235
        new_port_ids = current_port_ids - existing_port_ids
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   236
        new_ports = [p for p in internal_ports if p['id'] in new_port_ids]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   237
        old_ports = [p for p in self.internal_ports if
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   238
                     p['id'] not in current_port_ids]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   239
#         updated_ports = self._get_updated_ports(self.internal_ports,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   240
#                                                 internal_ports)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   241
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   242
        enable_ra = False
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   243
        for p in new_ports:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   244
            self.internal_network_added(p)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   245
            self.internal_ports.append(p)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   246
            enable_ra = enable_ra or self._port_has_ipv6_subnet(p)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   247
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   248
        for p in old_ports:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   249
            self.internal_network_removed(p)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   250
            self.internal_ports.remove(p)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   251
            enable_ra = enable_ra or self._port_has_ipv6_subnet(p)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   252
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   253
#         if updated_ports:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   254
#             for index, p in enumerate(internal_ports):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   255
#                 if not updated_ports.get(p['id']):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   256
#                     continue
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   257
#                 self.internal_ports[index] = updated_ports[p['id']]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   258
#                 interface_name = self.get_internal_device_name(p['id'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   259
#                 ip_cidrs = common_utils.fixed_ip_cidrs(p['fixed_ips'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   260
#                 self.driver.init_l3(interface_name, ip_cidrs=ip_cidrs,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   261
#                         namespace=self.ns_name)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   262
#                 enable_ra = enable_ra or self._port_has_ipv6_subnet(p)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   263
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   264
        # Enable RA
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   265
        if enable_ra:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   266
            self.radvd.enable(internal_ports)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   267
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   268
        # remove any internal stale router interfaces (i.e., l3i.. VNICs)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   269
        existing_devices = self._get_existing_devices()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   270
        current_internal_devs = set(n for n in existing_devices
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   271
                                    if n.startswith(INTERNAL_DEV_PREFIX))
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   272
        current_port_devs = set(self.get_internal_device_name(port_id)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   273
                                for port_id in current_port_ids)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   274
        stale_devs = current_internal_devs - current_port_devs
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   275
        for stale_dev in stale_devs:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   276
            LOG.debug(_('Deleting stale internal router device: %s'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   277
                      stale_dev)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   278
            self.driver.fini_l3(stale_dev)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   279
            self.driver.unplug(stale_dev)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   280
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   281
    def _get_ippool_name(self, mac_address, suffix=None):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   282
        # Generate a unique-name for ippool(1m) from that last 3
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   283
        # bytes of mac-address. It is called pool name, but it is
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   284
        # actually a 32 bit integer
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   285
        name = mac_address.split(':')[3:]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   286
        if suffix:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   287
            name.append(suffix)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   288
        return int("".join(name), 16)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   289
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   290
    def process_floating_ip_addresses(self, interface_name):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   291
        """Configure IP addresses on router's external gateway interface.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   292
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   293
        Ensures addresses for existing floating IPs and cleans up
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   294
        those that should not longer be configured.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   295
        """
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   296
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   297
        fip_statuses = {}
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   298
        if interface_name is None:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   299
            LOG.debug('No Interface for floating IPs router: %s',
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   300
                      self.router['id'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   301
            return fip_statuses
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   302
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   303
        ipintf = net_lib.IPInterface(interface_name)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   304
        ipaddr_list = ipintf.ipaddr_list()['static']
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   305
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   306
        existing_cidrs = set(ipaddr_list)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   307
        new_cidrs = set()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   308
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   309
        existing_nat_rules = [nat_rule for nat_rule in
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   310
                              self.ipfilters_manager.ipv4['nat']]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   311
        new_nat_rules = []
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   312
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   313
        floating_ips = self.get_floating_ips()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   314
        # Loop once to ensure that floating ips are configured.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   315
        for fip in floating_ips:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   316
            fip_ip = fip['floating_ip_address']
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   317
            fip_cidr = str(fip_ip) + FLOATING_IP_CIDR_SUFFIX
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   318
            new_cidrs.add(fip_cidr)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   319
            fixed_cidr = str(fip['fixed_ip_address']) + '/32'
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   320
            nat_rule = 'bimap %s %s -> %s' % (interface_name, fixed_cidr,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   321
                                              fip_cidr)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   322
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   323
            if fip_cidr not in existing_cidrs:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   324
                try:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   325
                    ipintf.create_address(fip_cidr)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   326
                    self.ipfilters_manager.add_nat_rules([nat_rule])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   327
                except Exception as err:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   328
                    # TODO(gmoodalb): If we fail in add_nat_rules(), then
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   329
                    # we need to remove the fip_cidr address
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   330
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   331
                    # any exception occurred here should cause the floating IP
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   332
                    # to be set in error state
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   333
                    fip_statuses[fip['id']] = (
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   334
                        l3_constants.FLOATINGIP_STATUS_ERROR)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   335
                    LOG.warn(_("Unable to configure IP address for "
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   336
                               "floating IP: %s: %s") % (fip['id'], err))
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   337
                    continue
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   338
            fip_statuses[fip['id']] = (
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   339
                l3_constants.FLOATINGIP_STATUS_ACTIVE)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   340
            LOG.debug("Floating ip %(id)s added, status %(status)s",
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   341
                      {'id': fip['id'],
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   342
                       'status': fip_statuses.get(fip['id'])})
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   343
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   344
            new_nat_rules.append(nat_rule)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   345
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   346
        # remove all the old NAT rules
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   347
        old_nat_rules = list(set(existing_nat_rules) - set(new_nat_rules))
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   348
        # Filter out 'bimap' NAT rules as we don't want to remove NAT rules
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   349
        # that were added for Metadata server
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   350
        old_nat_rules = [rule for rule in old_nat_rules if "bimap" in rule]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   351
        self.ipfilters_manager.remove_nat_rules(old_nat_rules)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   352
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   353
        # Clean up addresses that no longer belong on the gateway interface.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   354
        for ip_cidr in existing_cidrs - new_cidrs:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   355
            if ip_cidr.endswith(FLOATING_IP_CIDR_SUFFIX):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   356
                ipintf.delete_address(ip_cidr)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   357
        return fip_statuses
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   358
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   359
    # Todo(gmoodalb): need to do more work on ipv6 gateway
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   360
    def external_gateway_added(self, ex_gw_port, external_dlname):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   361
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
   362
        if not net_lib.Datalink.datalink_exists(external_dlname):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
   363
            dl = net_lib.Datalink(external_dlname)
4057
43172a88ed95 20829672 support flat network type in neutron
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   364
            # determine the network type of the external network
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
   365
            evsname = ex_gw_port['network_id']
4057
43172a88ed95 20829672 support flat network type in neutron
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   366
            cmd = ['/usr/sbin/evsadm', 'show-evs', '-co', 'l2type,vid',
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2174
diff changeset
   367
                   '-f', 'evs=%s' % evsname]
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
   368
            try:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
   369
                stdout = utils.execute(cmd)
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
   370
            except Exception as err:
4057
43172a88ed95 20829672 support flat network type in neutron
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   371
                LOG.error(_("Failed to retrieve the network type for "
43172a88ed95 20829672 support flat network type in neutron
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   372
                            "the external network, and it is required "
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2174
diff changeset
   373
                            "to create an external gateway port: %s") % err)
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
   374
                return
4057
43172a88ed95 20829672 support flat network type in neutron
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   375
            output = stdout.splitlines()[0].strip()
43172a88ed95 20829672 support flat network type in neutron
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   376
            l2type, vid = output.split(':')
43172a88ed95 20829672 support flat network type in neutron
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   377
            if l2type != 'flat' and l2type != 'vlan':
43172a88ed95 20829672 support flat network type in neutron
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   378
                LOG.error(_("External network should be either Flat or "
43172a88ed95 20829672 support flat network type in neutron
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   379
                            "VLAN based, and it is required to "
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2174
diff changeset
   380
                            "create an external gateway port"))
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
   381
                return
4057
43172a88ed95 20829672 support flat network type in neutron
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   382
            elif (l2type == 'vlan' and
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   383
                  self.agent_conf.get("external_network_datalink", None)):
4057
43172a88ed95 20829672 support flat network type in neutron
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   384
                LOG.warning(_("external_network_datalink is deprecated in "
4389
a44bb9a2917e 21086485 neutron-l3-agent service should not report online if trace dump happened
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 4057
diff changeset
   385
                              "Juno and will be removed in the next release "
a44bb9a2917e 21086485 neutron-l3-agent service should not report online if trace dump happened
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 4057
diff changeset
   386
                              "of Solaris OpenStack. Please use the evsadm "
a44bb9a2917e 21086485 neutron-l3-agent service should not report online if trace dump happened
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 4057
diff changeset
   387
                              "set-controlprop subcommand to setup the "
a44bb9a2917e 21086485 neutron-l3-agent service should not report online if trace dump happened
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 4057
diff changeset
   388
                              "uplink-port for an external network"))
4057
43172a88ed95 20829672 support flat network type in neutron
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   389
                # proceed with the old-style of doing things
43172a88ed95 20829672 support flat network type in neutron
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   390
                mac_address = ex_gw_port['mac_address']
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   391
                dl.create_vnic(self.agent_conf.external_network_datalink,
4057
43172a88ed95 20829672 support flat network type in neutron
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   392
                               mac_address=mac_address, vid=vid)
43172a88ed95 20829672 support flat network type in neutron
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   393
            else:
4975
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 4624
diff changeset
   394
                self.driver.plug(ex_gw_port['tenant_id'],
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 4624
diff changeset
   395
                                 ex_gw_port['network_id'],
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 4624
diff changeset
   396
                                 ex_gw_port['id'], external_dlname)
4057
43172a88ed95 20829672 support flat network type in neutron
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   397
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   398
        ip_cidrs = common_utils.fixed_ip_cidrs(ex_gw_port['fixed_ips'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   399
        self.driver.init_l3(external_dlname, ip_cidrs)
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
   400
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   401
        gw_ip = ex_gw_port['subnets'][0]['gateway_ip']
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
   402
        if gw_ip:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
   403
            cmd = ['/usr/bin/pfexec', '/usr/sbin/route', 'add', 'default',
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
   404
                   gw_ip]
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2174
diff changeset
   405
            stdout = utils.execute(cmd, extra_ok_codes=[errno.EEXIST])
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   406
            if 'entry exists' not in stdout:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   407
                self.remove_route = True
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
   408
2083
87196737f09f 19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1987
diff changeset
   409
            # for each of the internal ports, add Policy Based
87196737f09f 19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1987
diff changeset
   410
            # Routing (PBR) rule
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   411
            for port in self.internal_ports:
2083
87196737f09f 19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1987
diff changeset
   412
                internal_dlname = self.get_internal_device_name(port['id'])
2174
2856bd2e4b18 19898528 PBR rule must not forward packets addressed to internal default gateway
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 2083
diff changeset
   413
                rules = ['pass in on %s to %s:%s from any to !%s' %
2856bd2e4b18 19898528 PBR rule must not forward packets addressed to internal default gateway
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 2083
diff changeset
   414
                         (internal_dlname, external_dlname, gw_ip,
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   415
                          port['subnets'][0]['cidr'])]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   416
                ipversion = \
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   417
                    netaddr.IPNetwork(port['subnets'][0]['cidr']).version
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   418
                self.ipfilters_manager.add_ipf_rules(rules, ipversion)
2083
87196737f09f 19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1987
diff changeset
   419
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   420
    def external_gateway_updated(self, ex_gw_port, external_dlname):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2174
diff changeset
   421
        # There is nothing to do on Solaris
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2174
diff changeset
   422
        pass
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
   423
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   424
    def external_gateway_removed(self, ex_gw_port, external_dlname):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   425
        gw_ip = ex_gw_port['subnets'][0]['gateway_ip']
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
   426
        if gw_ip:
2083
87196737f09f 19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1987
diff changeset
   427
            # remove PBR rules
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   428
            for port in self.internal_ports:
2083
87196737f09f 19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1987
diff changeset
   429
                internal_dlname = self.get_internal_device_name(port['id'])
2174
2856bd2e4b18 19898528 PBR rule must not forward packets addressed to internal default gateway
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 2083
diff changeset
   430
                rules = ['pass in on %s to %s:%s from any to !%s' %
2856bd2e4b18 19898528 PBR rule must not forward packets addressed to internal default gateway
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 2083
diff changeset
   431
                         (internal_dlname, external_dlname, gw_ip,
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   432
                          port['subnets'][0]['cidr'])]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   433
                ipversion = \
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   434
                    netaddr.IPNetwork(port['subnets'][0]['cidr']).version
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   435
                self.ipfilters_manager.remove_ipf_rules(rules, ipversion)
2083
87196737f09f 19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1987
diff changeset
   436
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   437
            if self.remove_route:
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2174
diff changeset
   438
                cmd = ['/usr/bin/pfexec', '/usr/sbin/route', 'delete',
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2174
diff changeset
   439
                       'default', gw_ip]
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2174
diff changeset
   440
                utils.execute(cmd, check_exit_code=False)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   441
2083
87196737f09f 19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1987
diff changeset
   442
        if net_lib.Datalink.datalink_exists(external_dlname):
87196737f09f 19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1987
diff changeset
   443
            self.driver.fini_l3(external_dlname)
87196737f09f 19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1987
diff changeset
   444
            self.driver.unplug(external_dlname)
87196737f09f 19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1987
diff changeset
   445
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   446
    def _process_external_gateway(self, ex_gw_port):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   447
        # TODO(Carl) Refactor to clarify roles of ex_gw_port vs self.ex_gw_port
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   448
        ex_gw_port_id = (ex_gw_port and ex_gw_port['id'] or
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   449
                         self.ex_gw_port and self.ex_gw_port['id'])
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   450
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   451
        interface_name = None
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   452
        if ex_gw_port_id:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   453
            interface_name = self.get_external_device_name(ex_gw_port_id)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   454
        if ex_gw_port:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   455
            def _gateway_ports_equal(port1, port2):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   456
                def _get_filtered_dict(d, ignore):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   457
                    return dict((k, v) for k, v in d.iteritems()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   458
                                if k not in ignore)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   459
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   460
                keys_to_ignore = set(['binding:host_id'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   461
                port1_filtered = _get_filtered_dict(port1, keys_to_ignore)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   462
                port2_filtered = _get_filtered_dict(port2, keys_to_ignore)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   463
                return port1_filtered == port2_filtered
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   464
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   465
            if not self.ex_gw_port:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   466
                self.external_gateway_added(ex_gw_port, interface_name)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   467
            elif not _gateway_ports_equal(ex_gw_port, self.ex_gw_port):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   468
                self.external_gateway_updated(ex_gw_port, interface_name)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   469
        elif not ex_gw_port and self.ex_gw_port:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   470
            self.external_gateway_removed(self.ex_gw_port, interface_name)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   471
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   472
        # Remove any external stale router interfaces (i.e., l3e.. VNICs)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   473
        existing_devices = self._get_existing_devices()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   474
        stale_devs = [dev for dev in existing_devices
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   475
                      if dev.startswith(EXTERNAL_DEV_PREFIX) and
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   476
                      dev != interface_name]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   477
        for stale_dev in stale_devs:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   478
            LOG.debug(_('Deleting stale external router device: %s'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   479
                      stale_dev)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   480
            self.driver.fini_l3(stale_dev)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   481
            self.driver.unplug(stale_dev)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   482
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   483
        # Process SNAT rules for external gateway
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   484
        self.perform_snat_action(self._handle_router_snat_rules,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   485
                                 interface_name)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   486
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   487
    def external_gateway_snat_rules(self, ex_gw_ip, interface_name):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   488
        rules = []
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   489
        ip_cidrs = []
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   490
        for port in self.internal_ports:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   491
            if netaddr.IPNetwork(port['subnets'][0]['cidr']).version == 4:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   492
                ip_cidrs.extend(common_utils.fixed_ip_cidrs(port['fixed_ips']))
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   493
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   494
        for ip_cidr in ip_cidrs:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   495
            rules.append('map %s %s -> %s/32' %
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   496
                         (interface_name, ip_cidr, ex_gw_ip))
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   497
        return rules
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   498
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   499
    def _handle_router_snat_rules(self, ex_gw_port, interface_name, action):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   500
        # Remove all the old SNAT rules
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   501
        # This is safe because if use_namespaces is set as False
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   502
        # then the agent can only configure one router, otherwise
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   503
        # each router's SNAT rules will be in their own namespace
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   504
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   505
        # get only the SNAT rules
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   506
        old_snat_rules = [rule for rule in self.ipfilters_manager.ipv4['nat']
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   507
                          if rule.startswith('map')]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   508
        self.ipfilters_manager.remove_nat_rules(old_snat_rules)
2083
87196737f09f 19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1987
diff changeset
   509
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   510
        # And add them back if the action is add_rules
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   511
        if action == 'add_rules' and ex_gw_port:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   512
            # NAT rules are added only if ex_gw_port has an IPv4 address
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   513
            for ip_addr in ex_gw_port['fixed_ips']:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   514
                ex_gw_ip = ip_addr['ip_address']
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   515
                if netaddr.IPAddress(ex_gw_ip).version == 4:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   516
                    rules = self.external_gateway_snat_rules(ex_gw_ip,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   517
                                                             interface_name)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   518
                    self.ipfilters_manager.add_nat_rules(rules)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   519
                    break
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   520
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   521
    def process_external(self, agent):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   522
        existing_floating_ips = self.floating_ips
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   523
        try:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   524
            ex_gw_port = self.get_ex_gw_port()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   525
            self._process_external_gateway(ex_gw_port)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   526
            # TODO(Carl) Return after setting existing_floating_ips and
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   527
            # still call update_fip_statuses?
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   528
            if not ex_gw_port:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   529
                return
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2174
diff changeset
   530
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   531
            # Once NAT rules for floating IPs are safely in place
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   532
            # configure their addresses on the external gateway port
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   533
            interface_name = self.get_external_device_name(ex_gw_port['id'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   534
            fip_statuses = self.configure_fip_addresses(interface_name)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   535
        except (n_exc.FloatingIpSetupException,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   536
                n_exc.IpTablesApplyException) as e:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   537
                # All floating IPs must be put in error state
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   538
                LOG.exception(e)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   539
                fip_statuses = self.put_fips_in_error_state()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   540
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   541
        agent.update_fip_statuses(self, existing_floating_ips, fip_statuses)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   542
2083
87196737f09f 19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1987
diff changeset
   543
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   544
class EVSL3NATAgent(l3_agent.L3NATAgentWithStateReport):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   545
    OPTS = [
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   546
        cfg.StrOpt('external_network_datalink', default='net0',
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   547
                   help=_("Name of the datalink that connects to "
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   548
                          "an external network.")),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   549
        cfg.BoolOpt('allow_forwarding_between_networks', default=False,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   550
                    help=_("Allow forwarding of packets between tenant's "
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   551
                           "networks")),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   552
    ]
2083
87196737f09f 19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1987
diff changeset
   553
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   554
    def __init__(self, host, conf=None):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   555
        cfg.CONF.register_opts(self.OPTS)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   556
        cfg.CONF.register_opts(interface.OPTS)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   557
        super(EVSL3NATAgent, self).__init__(host=host, conf=conf)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   558
        cfg.CONF.register_opts(neutron_vpnaas.vpn_agent_opts, 'vpnagent')
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   559
        self.service = vpn_service.VPNService(self)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   560
        self.device_drivers = self.service.load_device_drivers(host)
2083
87196737f09f 19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1987
diff changeset
   561
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   562
    def _router_added(self, router_id, router):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   563
        args = []
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   564
        kwargs = {
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   565
            'router_id': router_id,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   566
            'router': router,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   567
            'use_ipv6': self.use_ipv6,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   568
            'agent_conf': self.conf,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   569
            'interface_driver': self.driver,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   570
        }
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   571
        ri = SolarisRouterInfo(*args, **kwargs)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   572
        registry.notify(resources.ROUTER, events.BEFORE_CREATE,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   573
                        self, router=ri)
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2174
diff changeset
   574
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   575
        self.router_info[router_id] = ri
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   576
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   577
        ri.initialize(self.process_monitor)