components/openstack/neutron/files/agent/solaris/net_lib.py
author Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
Tue, 15 Nov 2016 16:50:44 -0800
changeset 7314 014a673c1f62
parent 6848 8e252a37ed0d
child 7404 afd5ce53bbf1
permissions -rw-r--r--
25029929 non-VM ports don't reflect the MTU of the neutron network 25058952 Add log.exception() to the neutron driver for errors
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
5579
48110757c6c6 PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
     3
# 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
     4
#
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     5
#    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
     6
#    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
     7
#    a copy of the License at
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
#         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
    10
#
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    11
#    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
    12
#    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
    13
#    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
    14
#    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
    15
#    under the License.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    16
#
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    17
# @author: Girish Moodalbail, Oracle, Inc.
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
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
    20
import eventlet
1872
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
    21
import netaddr
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
    22
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
    23
from oslo_log import log as logging
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
    24
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1872
diff changeset
    25
from neutron.agent.linux import utils
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
    26
from neutron.i18n import _LE
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
    27
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
    28
LOG = logging.getLogger(__name__)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    29
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    30
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    31
class CommandBase(object):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    32
    @classmethod
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    33
    def execute_with_pfexec(cls, cmd, **kwargs):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    34
        # uses pfexec
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    35
        cmd.insert(0, '/usr/bin/pfexec')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    36
        return utils.execute(cmd, **kwargs)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    37
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    38
    @classmethod
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    39
    def execute(cls, cmd, **kwargs):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    40
        return utils.execute(cmd, **kwargs)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    41
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    42
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    43
class IPInterface(CommandBase):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    44
    '''Wrapper around Solaris ipadm(1m) command.'''
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    45
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    46
    def __init__(self, ifname):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    47
        self._ifname = ifname
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    48
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    49
    @classmethod
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    50
    def ifname_exists(cls, ifname):
5579
48110757c6c6 PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
    51
        try:
48110757c6c6 PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
    52
            cmd = ['/usr/sbin/ipadm', 'show-if', '-po', 'ifname', ifname]
48110757c6c6 PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
    53
            cls.execute(cmd, log_fail_as_error=False)
48110757c6c6 PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
    54
        except Exception:
48110757c6c6 PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
    55
            return False
48110757c6c6 PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
    56
        return True
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    57
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    58
    @classmethod
6848
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    59
    def ipaddr_exists(cls, ipaddr, ifname=None):
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    60
        cmd = ['/usr/sbin/ipadm', 'show-addr', '-po', 'addr']
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    61
        if ifname:
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    62
            cmd.append(ifname)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    63
        stdout = cls.execute(cmd)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    64
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    65
        return ipaddr in stdout
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    66
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    67
    def ipaddr_list(self, filters=None):
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1872
diff changeset
    68
        cmd = ['/usr/sbin/ipadm', 'show-addr', '-po', 'type,addr',
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    69
               self._ifname]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    70
        stdout = self.execute(cmd)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    71
        atype_addrs = stdout.strip().split('\n')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    72
        result = {}
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    73
        for atype_addr in atype_addrs:
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1872
diff changeset
    74
            atype, addr = atype_addr.split(':', 1)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    75
            val = result.get(atype)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    76
            if val is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    77
                result[atype] = []
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    78
                val = result.get(atype)
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1872
diff changeset
    79
            # in the case of IPv6 addresses remove any escape '\' character
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1872
diff changeset
    80
            val.append(addr.replace("\\", ""))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    81
        return result
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    82
6555
321727f908b3 22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6031
diff changeset
    83
    def create_address(self, ipaddr, addrobjname=None, temp=True,
321727f908b3 22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6031
diff changeset
    84
                       ifcheck=True, addrcheck=True):
321727f908b3 22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6031
diff changeset
    85
        if ifcheck and not self.ifname_exists(self._ifname):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    86
            # create ip interface
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    87
            cmd = ['/usr/sbin/ipadm', 'create-ip', self._ifname]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    88
            if temp:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    89
                cmd.append('-t')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    90
            self.execute_with_pfexec(cmd)
6848
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
    91
        elif addrcheck and self.ipaddr_exists(ipaddr, self._ifname):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    92
            return
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    93
1872
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
    94
        # If an address is IPv6, then to create a static IPv6 address
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
    95
        # we need to create link-local address first
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
    96
        if netaddr.IPNetwork(ipaddr).version == 6:
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
    97
            # check if link-local address already exists
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
    98
            cmd = ['/usr/sbin/dladm', 'show-linkprop', '-co', 'value',
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
    99
                   '-p', 'mac-address', self._ifname]
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
   100
            stdout = self.execute(cmd)
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
   101
            mac_addr = stdout.splitlines()[0].strip()
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
   102
            ll_addr = netaddr.EUI(mac_addr).ipv6_link_local()
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
   103
6848
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   104
            if addrcheck and not self.ipaddr_exists(str(ll_addr),
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   105
                                                    self._ifname):
1872
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
   106
                # create a link-local address
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
   107
                cmd = ['/usr/sbin/ipadm', 'create-addr', '-T', 'static', '-a',
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
   108
                       str(ll_addr), self._ifname]
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
   109
                if temp:
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
   110
                    cmd.append('-t')
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
   111
                self.execute_with_pfexec(cmd)
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
   112
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
   113
        cmd = ['/usr/sbin/ipadm', 'create-addr', '-T', 'static', '-a',
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   114
               ipaddr, self._ifname]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   115
        if temp:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   116
            cmd.append('-t')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   117
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: 1977
diff changeset
   118
        self.execute_with_pfexec(cmd)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   119
4975
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   120
    def create_addrconf(self, temp=True):
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   121
        if not self.ifname_exists(self._ifname):
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   122
            # create ip interface
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   123
            cmd = ['/usr/sbin/ipadm', 'create-ip', self._ifname]
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   124
            if temp:
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   125
                cmd.append('-t')
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   126
            self.execute_with_pfexec(cmd)
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   127
        else:
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   128
            cmd = ['/usr/sbin/ipadm', 'show-addr', '-po', 'type', self._ifname]
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   129
            stdout = self.execute(cmd)
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   130
            if 'addrconf' in stdout:
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   131
                return
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   132
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   133
        cmd = ['/usr/sbin/ipadm', 'create-addr', '-T', 'addrconf',
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   134
               self._ifname]
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   135
        if temp:
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   136
            cmd.append('-t')
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   137
        self.execute_with_pfexec(cmd)
6445e44cfccd 21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 3998
diff changeset
   138
6555
321727f908b3 22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6031
diff changeset
   139
    def delete_address(self, ipaddr, addrcheck=True):
6848
8e252a37ed0d PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6555
diff changeset
   140
        if addrcheck and not self.ipaddr_exists(ipaddr, self._ifname):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   141
            return
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   142
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   143
        cmd = ['/usr/sbin/ipadm', 'show-addr', '-po', 'addrobj,addr',
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   144
               self._ifname]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   145
        stdout = self.execute(cmd)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   146
        aobj_addrs = stdout.strip().split('\n')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   147
        for aobj_addr in aobj_addrs:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   148
            if ipaddr not in aobj_addr:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   149
                continue
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   150
            aobj = aobj_addr.split(':')[0]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   151
            cmd = ['/usr/sbin/ipadm', 'delete-addr', aobj]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   152
            self.execute_with_pfexec(cmd)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   153
            break
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   154
1872
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
   155
        isV6 = netaddr.IPNetwork(ipaddr).version == 6
0b81e3d9f3ae 18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 1760
diff changeset
   156
        if len(aobj_addrs) == 1 or (isV6 and len(aobj_addrs) == 2):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   157
            # delete the interface as well
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   158
            cmd = ['/usr/sbin/ipadm', 'delete-ip', self._ifname]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   159
            self.execute_with_pfexec(cmd)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   160
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   161
    def delete_ip(self):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   162
        if not self.ifname_exists(self._ifname):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   163
            return
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   164
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   165
        cmd = ['/usr/sbin/ipadm', 'delete-ip', self._ifname]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   166
        self.execute_with_pfexec(cmd)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   167
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   168
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   169
class Datalink(CommandBase):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   170
    '''Wrapper around Solaris dladm(1m) command.'''
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   171
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   172
    def __init__(self, dlname):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   173
        self._dlname = dlname
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   174
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   175
    @classmethod
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   176
    def datalink_exists(cls, dlname):
5579
48110757c6c6 PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   177
        try:
48110757c6c6 PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   178
            cmd = ['/usr/sbin/dladm', 'show-link', '-po', 'link', dlname]
48110757c6c6 PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   179
            utils.execute(cmd, log_fail_as_error=False)
48110757c6c6 PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   180
        except Exception:
48110757c6c6 PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   181
            return False
48110757c6c6 PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   182
        return True
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   183
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1872
diff changeset
   184
    def create_vnic(self, lower_link, mac_address=None, vid=None, temp=True):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   185
        if self.datalink_exists(self._dlname):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   186
            return
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   187
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1872
diff changeset
   188
        if vid:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1872
diff changeset
   189
            # If the default_tag of lower_link is same as vid, then there
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1872
diff changeset
   190
            # is no need to set vid
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1872
diff changeset
   191
            cmd = ['/usr/sbin/dladm', 'show-linkprop', '-co', 'value',
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1872
diff changeset
   192
                   '-p', 'default_tag', lower_link]
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1872
diff changeset
   193
            stdout = utils.execute(cmd)
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   194
            default_tag = stdout.splitlines()[0].strip()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4975
diff changeset
   195
            if default_tag == vid or (vid == '1' and default_tag == '0'):
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1872
diff changeset
   196
                vid = '0'
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1872
diff changeset
   197
        else:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1872
diff changeset
   198
            vid = '0'
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   199
        cmd = ['/usr/sbin/dladm', 'create-vnic', '-l', lower_link,
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1872
diff changeset
   200
               '-m', mac_address, '-v', vid, self._dlname]
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   201
        if temp:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   202
            cmd.append('-t')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   203
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: 1977
diff changeset
   204
        self.execute_with_pfexec(cmd)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   205
7314
014a673c1f62 25029929 non-VM ports don't reflect the MTU of the neutron network
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 6848
diff changeset
   206
    def set_prop(self, pname, pvalue, temp=True):
014a673c1f62 25029929 non-VM ports don't reflect the MTU of the neutron network
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 6848
diff changeset
   207
        cmd = ['/usr/sbin/dladm', 'set-linkprop', '-p', '%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: 6848
diff changeset
   208
               % (pname, pvalue), self._dlname]
014a673c1f62 25029929 non-VM ports don't reflect the MTU of the neutron network
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 6848
diff changeset
   209
        if temp:
014a673c1f62 25029929 non-VM ports don't reflect the MTU of the neutron network
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 6848
diff changeset
   210
            cmd.append('-t')
014a673c1f62 25029929 non-VM ports don't reflect the MTU of the neutron network
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 6848
diff changeset
   211
        self.execute_with_pfexec(cmd)
014a673c1f62 25029929 non-VM ports don't reflect the MTU of the neutron network
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents: 6848
diff changeset
   212
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   213
    def delete_vnic(self):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   214
        if not self.datalink_exists(self._dlname):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   215
            return
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   216
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   217
        cmd = ['/usr/sbin/dladm', 'delete-vnic', self._dlname]
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: 1977
diff changeset
   218
        self.execute_with_pfexec(cmd)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   219
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2083
diff changeset
   220
    @classmethod
5579
48110757c6c6 PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   221
    def show_link(cls):
48110757c6c6 PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5405
diff changeset
   222
        cmd = ['/usr/sbin/dladm', 'show-link', '-po', 'link']
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2083
diff changeset
   223
        stdout = utils.execute(cmd)
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2083
diff changeset
   224
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 2083
diff changeset
   225
        return stdout.splitlines()
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   226
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   227
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   228
def _arping(iface_name, address, count):
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   229
    # Set timeout with -w to ensure arping exits in case the interface
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   230
    # is deleted while it is running
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   231
    arping_cmd = ['/usr/sbin/arping', '-A', '-I', iface_name, '-c', count,
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   232
                  '-w', 2 * count, address]
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   233
    try:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   234
        utils.execute(arping_cmd, check_exit_code=False)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   235
    except Exception:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   236
        msg = _LE("Failed sending gratuitous ARP to %(addr)s on "
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   237
                  "an interface %(iface)s")
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   238
        LOG.exception(msg, {'addr': address, 'iface': iface_name})
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   239
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   240
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   241
def send_ip_addr_adv_notif(iface_name, address, config):
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   242
    """Send advance notification of an IP address assignment.
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   243
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   244
    If the address is in the IPv4 family, send gratuitous ARP.
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   245
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   246
    If the address is in the IPv6 family, no advance notification is
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   247
    necessary, since the Neighbor Discovery Protocol (NDP), Duplicate
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   248
    Address Discovery (DAD), and (for stateless addresses) router
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   249
    advertisements (RAs) are sufficient for address resolution and
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   250
    duplicate address detection.
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   251
    """
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   252
    count = config.send_arp_for_ha
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   253
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   254
    def arping():
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   255
        _arping(iface_name, address, count)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   256
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   257
    if count > 0 and netaddr.IPAddress(address).version == 4:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 5579
diff changeset
   258
        eventlet.spawn_n(arping)