components/openstack/neutron/files/agent/solaris/interface.py
author Rich Burridge <rich.burridge@oracle.com>
Tue, 02 May 2017 17:33:26 -0700
changeset 7964 d9801318ed3d
parent 7482 191fe9eb5293
permissions -rw-r--r--
25981468 Build ilmbase and openexr with the GNU compilers
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
     1
# Copyright (c) 2013, 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
     2
#
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     3
#    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
     4
#    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
     5
#    a copy of the License at
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
#         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
     8
#
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     9
#    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
    10
#    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
    11
#    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
    12
#    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
    13
#    under the License.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    14
#
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    15
# @author: Girish Moodalbail, Oracle, Inc.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    16
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
    17
from openstack_common import get_ovsdb_info
4975
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 4389
diff changeset
    18
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    19
from oslo_config import cfg
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
    20
from oslo_log import log as logging
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
    21
from oslo_serialization import jsonutils
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    22
7178
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
    23
from keystoneclient import session
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
    24
from keystoneclient.auth.identity.generic import Password
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
    25
from neutron.agent.common import ovs_lib
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
    26
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
    27
from neutron.agent.solaris import net_lib
4975
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 4389
diff changeset
    28
from neutron.common import exceptions
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
    29
from neutron.plugins.common import constants as p_const
7178
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
    30
from neutronclient.v2_0 import client
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    31
4975
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 4389
diff changeset
    32
LOG = logging.getLogger(__name__)
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 4389
diff changeset
    33
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    34
OPTS = [
6848
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    35
    cfg.StrOpt('admin_user',
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    36
               help=_("Admin username")),
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    37
    cfg.StrOpt('admin_password',
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    38
               help=_("Admin password"),
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    39
               secret=True),
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    40
    cfg.StrOpt('admin_tenant_name',
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    41
               help=_("Admin tenant name")),
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    42
    cfg.StrOpt('auth_url',
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    43
               help=_("Authentication URL")),
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    44
    cfg.StrOpt('auth_strategy', default='keystone',
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    45
               help=_("The type of authentication to use")),
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    46
    cfg.StrOpt('auth_region',
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    47
               help=_("Authentication region")),
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    48
    cfg.StrOpt('endpoint_type',
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    49
               default='publicURL',
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    50
               help=_("Network service endpoint type to pull from "
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    51
                      "the keystone catalog")),
7178
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
    52
    # Keystone V3 Password authentication plugin related options
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
    53
    cfg.StrOpt('project_name',
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
    54
               help=_("Project name to scope to")),
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
    55
    cfg.StrOpt('project_domain_name',
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
    56
               help=_("Domain name containing project")),
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
    57
    cfg.StrOpt('user_domain_name',
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
    58
               help=_("User's domain name")),
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
    59
    cfg.StrOpt('trust_id',
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
    60
               help=_("Trust ID")),
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    61
]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    62
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    63
6848
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    64
class OVSInterfaceDriver(object):
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    65
    """Driver used to manage Solaris OVS VNICs.
4975
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 4389
diff changeset
    66
6848
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    67
    This class provides methods to create/delete a Crossbow VNIC and
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    68
    add it as a port of OVS bridge.
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    69
    TODO(gmoodalb): More methods to implement here for MITAKA??
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    70
    """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    71
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    72
    # TODO(gmoodalb): dnsmasq uses old style `ifreq', so 16 is the maximum
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    73
    # length including the NUL character. If we change it to use new style
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    74
    # `lifreq', then we will be able to extend the length to 32 characters.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    75
    VNIC_NAME_MAXLEN = 15
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3524
diff changeset
    76
    VNIC_NAME_PREFIX = 'dh'
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    77
    VNIC_NAME_SUFFIX = '_0'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    78
    VNIC_NAME_LEN_WO_SUFFIX = VNIC_NAME_MAXLEN - \
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    79
        len(VNIC_NAME_SUFFIX)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    80
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    81
    def __init__(self, conf):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    82
        self.conf = conf
6848
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    83
        self._neutron_client = None
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    84
4975
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 4389
diff changeset
    85
    @property
6848
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    86
    def neutron_client(self):
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    87
        if self._neutron_client:
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    88
            return self._neutron_client
7178
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
    89
        auth_plugin = Password(
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
    90
            auth_url=self.conf.auth_url,
6848
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    91
            username=self.conf.admin_user,
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    92
            password=self.conf.admin_password,
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    93
            tenant_name=self.conf.admin_tenant_name,
7178
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
    94
            project_name=self.conf.project_name,
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
    95
            project_domain_name=self.conf.project_domain_name,
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
    96
            user_domain_name=self.conf.user_domain_name,
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
    97
            trust_id=self.conf.trust_id
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
    98
        )
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
    99
        sess = session.Session(auth=auth_plugin)
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
   100
        self._neutron_client = client.Client(
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
   101
            session=sess, region_name=self.conf.auth_region,
6848
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   102
            auth_strategy=self.conf.auth_strategy,
7178
5dc920725250 24927083 L3 Agent needs to account for Keystone v3
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6848
diff changeset
   103
            endpoint_type=self.conf.endpoint_type)
6848
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   104
        return self._neutron_client
4975
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 4389
diff changeset
   105
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   106
    def fini_l3(self, device_name):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   107
        ipif = net_lib.IPInterface(device_name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   108
        ipif.delete_ip()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   109
4975
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 4389
diff changeset
   110
    def init_l3(self, device_name, ip_cidrs, addrconf=False):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   111
        """Set the L3 settings for the interface using data from the port.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   112
           ip_cidrs: list of 'X.X.X.X/YY' strings
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   113
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   114
        ipif = net_lib.IPInterface(device_name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   115
        for ip_cidr in ip_cidrs:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   116
            ipif.create_address(ip_cidr)
4975
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 4389
diff changeset
   117
        if addrconf:
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 4389
diff changeset
   118
            ipif.create_addrconf()
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   119
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   120
    # TODO(gmoodalb): - probably take PREFIX?? for L3
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   121
    def get_device_name(self, port):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   122
        vnicname = (self.VNIC_NAME_PREFIX +
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   123
                    port.id)[:self.VNIC_NAME_LEN_WO_SUFFIX]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   124
        vnicname += self.VNIC_NAME_SUFFIX
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   125
        return vnicname.replace('-', '_')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   126
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   127
    def plug(self, tenant_id, network_id, port_id, datalink_name, mac_address,
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   128
             network=None, bridge=None, namespace=None, prefix=None,
6848
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   129
             protection=False, mtu=None, vif_type=None):
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   130
        """Plug in the interface."""
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   131
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   132
        if net_lib.Datalink.datalink_exists(datalink_name):
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   133
            LOG.info(_("Device %s already exists"), datalink_name)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   134
            return
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   135
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   136
        if bridge is None:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   137
            bridge = self.conf.ovs_integration_bridge
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   138
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   139
        # check if bridge exists
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   140
        ovs = ovs_lib.OVSBridge(bridge)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   141
        if not ovs.bridge_exists(bridge):
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   142
            raise exceptions.BridgeDoesNotExist(bridge=bridge)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   143
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   144
        if network is None:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   145
            network = self.neutron_client.show_network(network_id)['network']
7314
014a673c1f62 25029929 non-VM ports don't reflect the MTU of the neutron network
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 7178
diff changeset
   146
            mtu = network.get('mtu')
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   147
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   148
        network_type = network.get('provider:network_type')
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   149
        vid = None
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   150
        lower_link = None
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   151
        if network_type == p_const.TYPE_VXLAN:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   152
            lower_link = 'ovs.vxlan1'
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   153
        elif network_type in [p_const.TYPE_VLAN, p_const.TYPE_FLAT]:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   154
            phys_network = network.get('provider:physical_network')
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   155
            # For integration bridge the ovs agent will take care of
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   156
            # adding the vlan id
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   157
            if bridge != self.conf.ovs_integration_bridge:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   158
                vid = network.get('provider:segmentation_id')
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   159
            # need to determine the bridge mapping
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   160
            try:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   161
                results = get_ovsdb_info('Open_vSwitch', ['other_config'])
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   162
            except Exception as err:
7314
014a673c1f62 25029929 non-VM ports don't reflect the MTU of the neutron network
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 7178
diff changeset
   163
                LOG.exception(_("Failed to retrieve other_config from %s: %s"),
014a673c1f62 25029929 non-VM ports don't reflect the MTU of the neutron network
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 7178
diff changeset
   164
                              bridge, err)
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   165
                raise
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   166
            other_config = results[0]['other_config']
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   167
            if not other_config:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   168
                msg = (_("'other_config' column in 'Open_vSwitch' OVSDB table "
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   169
                         "is not configured. Please configure it so that "
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   170
                         "lower-link can be determined for the VNICs"))
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   171
                raise exceptions.Invalid(message=msg)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   172
            bridge_mappings = other_config.get('bridge_mappings')
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   173
            if not bridge_mappings:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   174
                msg = (_("'bridge_mappings' info is not set in 'other_config' "
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   175
                         "column of 'Open_vSwitch' OVSDB table. Please "
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   176
                         "configure it so that lower-link can be determined "
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   177
                         "for the VNICs"))
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   178
                raise exceptions.Invalid(message=msg)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   179
            for bridge_mapping in bridge_mappings.split(','):
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   180
                if phys_network not in bridge_mapping:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   181
                    continue
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   182
                lower_link = bridge_mapping.split(':')[1]
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   183
                break
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   184
        else:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   185
            # TYPE_GRE and TYPE_LOCAL
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   186
            msg = (_("Unsupported network type: %s") % network_type)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   187
            LOG.error(msg)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   188
            raise exceptions.Invalid(message=msg)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   189
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   190
        # if lower_link is not set or empty, we need to fail
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   191
        if not lower_link:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   192
            msg = (_("Failed to determine the lower_link for VNIC "
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   193
                     "%s on physical_network %s") %
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   194
                   (datalink_name, phys_network))
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   195
            LOG.error(msg)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   196
            raise exceptions.Invalid(message=msg)
6123
806b9ac912fa 23480374 network_info is incorrectly checked against None when it can be [] as well
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6031
diff changeset
   197
806b9ac912fa 23480374 network_info is incorrectly checked against None when it can be [] as well
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6031
diff changeset
   198
        if vif_type == 'binding_failed':
806b9ac912fa 23480374 network_info is incorrectly checked against None when it can be [] as well
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6031
diff changeset
   199
            msg = (_('Port binding has failed for %s. Ensure that '
806b9ac912fa 23480374 network_info is incorrectly checked against None when it can be [] as well
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6031
diff changeset
   200
                     'OVS agent is running and/or bridge_mappings are '
806b9ac912fa 23480374 network_info is incorrectly checked against None when it can be [] as well
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6031
diff changeset
   201
                     'correctly configured. Port will not have network '
806b9ac912fa 23480374 network_info is incorrectly checked against None when it can be [] as well
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6031
diff changeset
   202
                     'connectivity') % datalink_name)
806b9ac912fa 23480374 network_info is incorrectly checked against None when it can be [] as well
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6031
diff changeset
   203
            LOG.error(msg)
806b9ac912fa 23480374 network_info is incorrectly checked against None when it can be [] as well
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6031
diff changeset
   204
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   205
        dl = net_lib.Datalink(datalink_name)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   206
        dl.create_vnic(lower_link, mac_address, vid, temp=True)
7314
014a673c1f62 25029929 non-VM ports don't reflect the MTU of the neutron network
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 7178
diff changeset
   207
        if mtu:
7482
191fe9eb5293 25232821 inability to set MTU of a VNIC over VXLAN datalink must be handled correctly
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 7314
diff changeset
   208
            try:
191fe9eb5293 25232821 inability to set MTU of a VNIC over VXLAN datalink must be handled correctly
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 7314
diff changeset
   209
                dl.set_prop('mtu', mtu)
191fe9eb5293 25232821 inability to set MTU of a VNIC over VXLAN datalink must be handled correctly
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 7314
diff changeset
   210
            except Exception:
191fe9eb5293 25232821 inability to set MTU of a VNIC over VXLAN datalink must be handled correctly
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 7314
diff changeset
   211
                msg = (_("Failed to set mtu value of '%s' on '%s' over lower "
191fe9eb5293 25232821 inability to set MTU of a VNIC over VXLAN datalink must be handled correctly
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 7314
diff changeset
   212
                         "link '%s'. If you are using VLANs, then ensure that "
191fe9eb5293 25232821 inability to set MTU of a VNIC over VXLAN datalink must be handled correctly
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 7314
diff changeset
   213
                         "either the mapping of physical networks to MTU "
191fe9eb5293 25232821 inability to set MTU of a VNIC over VXLAN datalink must be handled correctly
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 7314
diff changeset
   214
                         "values (ml2_conf.ini`physical_network_mtus option) "
191fe9eb5293 25232821 inability to set MTU of a VNIC over VXLAN datalink must be handled correctly
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 7314
diff changeset
   215
                         "or neutron.conf`global_physnet_mtu value is set "
191fe9eb5293 25232821 inability to set MTU of a VNIC over VXLAN datalink must be handled correctly
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 7314
diff changeset
   216
                         "correctly. If you are using VXLANs, make sure that "
191fe9eb5293 25232821 inability to set MTU of a VNIC over VXLAN datalink must be handled correctly
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 7314
diff changeset
   217
                         "ml2_conf.ini`path_mtu value is set correctly.") %
191fe9eb5293 25232821 inability to set MTU of a VNIC over VXLAN datalink must be handled correctly
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 7314
diff changeset
   218
                       (mtu, datalink_name, lower_link))
191fe9eb5293 25232821 inability to set MTU of a VNIC over VXLAN datalink must be handled correctly
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 7314
diff changeset
   219
                LOG.error(msg)
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   220
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   221
        attrs = [('external_ids', {'iface-id': port_id,
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   222
                                   'iface-status': 'active',
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   223
                                   'attached-mac': mac_address})]
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   224
        ovs.replace_port(datalink_name, *attrs)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   225
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   226
    def unplug(self, datalink_name, bridge=None, namespace=None, prefix=None):
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   227
        """Unplug the interface."""
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   228
6848
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   229
        # remove any IP addresses on top of this datalink, otherwise we will
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   230
        # get 'device busy' error while deleting the datalink
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   231
        self.fini_l3(datalink_name)
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   232
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   233
        dl = net_lib.Datalink(datalink_name)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   234
        dl.delete_vnic()
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   235
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   236
        if bridge is None:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   237
            bridge = self.conf.ovs_integration_bridge
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   238
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   239
        # check if bridge exists
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   240
        ovs = ovs_lib.OVSBridge(bridge)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   241
        if not ovs.bridge_exists(bridge):
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   242
            raise exceptions.BridgeDoesNotExist(bridge=bridge)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   243
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   244
        try:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   245
            ovs.delete_port(datalink_name)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   246
            LOG.debug("Unplugged interface '%s'", datalink_name)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   247
        except RuntimeError as err:
7314
014a673c1f62 25029929 non-VM ports don't reflect the MTU of the neutron network
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 7178
diff changeset
   248
            LOG.exception(_("Failed unplugging interface '%s': %s") %
014a673c1f62 25029929 non-VM ports don't reflect the MTU of the neutron network
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 7178
diff changeset
   249
                          (datalink_name, err))
6848
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   250
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   251
    @property
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   252
    def use_gateway_ips(self):
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   253
        """Whether to use gateway IPs instead of unique IP allocations.
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   254
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   255
        In each place where the DHCP agent runs, and for each subnet for
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   256
        which DHCP is handling out IP addresses, the DHCP port needs -
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   257
        at the Linux level - to have an IP address within that subnet.
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   258
        Generally this needs to be a unique Neutron-allocated IP
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   259
        address, because the subnet's underlying L2 domain is bridged
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   260
        across multiple compute hosts and network nodes, and for HA
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   261
        there may be multiple DHCP agents running on that same bridged
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   262
        L2 domain.
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   263
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   264
        However, if the DHCP ports - on multiple compute/network nodes
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   265
        but for the same network - are _not_ bridged to each other,
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   266
        they do not need each to have a unique IP address.  Instead
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   267
        they can all share the same address from the relevant subnet.
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   268
        This works, without creating any ambiguity, because those
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   269
        ports are not all present on the same L2 domain, and because
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   270
        no data within the network is ever sent to that address.
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   271
        (DHCP requests are broadcast, and it is the network's job to
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   272
        ensure that such a broadcast will reach at least one of the
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   273
        available DHCP servers.  DHCP responses will be sent _from_
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   274
        the DHCP port address.)
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   275
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   276
        Specifically, for networking backends where it makes sense,
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   277
        the DHCP agent allows all DHCP ports to use the subnet's
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   278
        gateway IP address, and thereby to completely avoid any unique
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   279
        IP address allocation.  This behaviour is selected by running
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   280
        the DHCP agent with a configured interface driver whose
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   281
        'use_gateway_ips' property is True.
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   282
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   283
        When an operator deploys Neutron with an interface driver that
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   284
        makes use_gateway_ips True, they should also ensure that a
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   285
        gateway IP address is defined for each DHCP-enabled subnet,
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   286
        and that the gateway IP address doesn't change during the
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   287
        subnet's lifetime.
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   288
        """
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   289
        return False