author | Laszlo Peter <laszlo.peter@oracle.com> |
Wed, 07 Sep 2016 14:48:41 -0700 | |
changeset 6848 | 8e252a37ed0d |
parent 6561 | 6c1204ee2522 |
permissions | -rw-r--r-- |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
1 |
# vim: tabstop=4 shiftwidth=4 softtabstop=4 |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
2 |
|
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
2174
diff
changeset
|
3 |
# Copyright 2012 VMware, Inc. All rights reserved. |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
4 |
# |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
5 |
# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
6 |
# |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
7 |
# Licensed under the Apache License, Version 2.0 (the "License"); you may |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
8 |
# not use this file except in compliance with the License. You may obtain |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
9 |
# a copy of the License at |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
10 |
# |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
11 |
# http://www.apache.org/licenses/LICENSE-2.0 |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
12 |
# |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
13 |
# Unless required by applicable law or agreed to in writing, software |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
14 |
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
15 |
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
16 |
# License for the specific language governing permissions and limitations |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
17 |
# under the License. |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
18 |
# |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
19 |
|
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
20 |
""" |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
21 |
Based off of generic l3_agent (neutron/agent/l3/agent.py) code |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
22 |
""" |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
23 |
|
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
2174
diff
changeset
|
24 |
import errno |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1760
diff
changeset
|
25 |
import netaddr |
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1760
diff
changeset
|
26 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
27 |
from oslo_config import cfg |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
28 |
from oslo_log import log as logging |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
29 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
30 |
from neutron._i18n import _, _LE, _LW |
6031
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
31 |
from neutron.agent.common import ovs_lib |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
32 |
from neutron.agent.l3 import agent as l3_agent |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
33 |
from neutron.agent.l3 import router_info as router |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1760
diff
changeset
|
34 |
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
|
35 |
from neutron.agent.solaris import interface |
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1760
diff
changeset
|
36 |
from neutron.agent.solaris import net_lib |
5579
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
37 |
from neutron.agent.solaris import packetfilter |
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
2174
diff
changeset
|
38 |
from neutron.agent.solaris import ra |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
39 |
from neutron.callbacks import events |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
40 |
from neutron.callbacks import registry |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
41 |
from neutron.callbacks import resources |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1760
diff
changeset
|
42 |
from neutron.common import constants as l3_constants |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
43 |
from neutron.common import exceptions as n_exc |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
44 |
from neutron.common import ipv6_utils |
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
2174
diff
changeset
|
45 |
from neutron.common import utils as common_utils |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
46 |
|
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
47 |
from neutron_vpnaas.services.vpn import vpn_service |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
48 |
import neutron_vpnaas.services.vpn.agent as neutron_vpnaas |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
49 |
|
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
50 |
LOG = logging.getLogger(__name__) |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
51 |
INTERNAL_DEV_PREFIX = 'l3i' |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
52 |
EXTERNAL_DEV_PREFIX = 'l3e' |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1760
diff
changeset
|
53 |
FLOATING_IP_CIDR_SUFFIX = '/32' |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
54 |
|
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
55 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
56 |
class SolarisRouterInfo(router.RouterInfo): |
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
2174
diff
changeset
|
57 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
58 |
def __init__(self, router_id, router, agent_conf, interface_driver, |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
59 |
use_ipv6=False): |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
60 |
super(SolarisRouterInfo, self).__init__(router_id, router, agent_conf, |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
61 |
interface_driver, use_ipv6) |
5579
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
62 |
self.pf = packetfilter.PacketFilter("_auto/neutron:l3:agent") |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
63 |
self.iptables_manager = None |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
64 |
self.remove_route = False |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
65 |
self.router_namespace = None |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
66 |
self.ns_name = None |
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
67 |
self.ipnet_gwportname = dict() |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
68 |
self.tenant_subnets = dict() |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
69 |
self.tenant_subnets['all_tenants'] = set() |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1760
diff
changeset
|
70 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
71 |
def initialize(self, process_monitor): |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
72 |
"""Initialize the router on the system. |
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
2174
diff
changeset
|
73 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
74 |
This differs from __init__ in that this method actually affects the |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
75 |
system creating namespaces, starting processes, etc. The other merely |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
76 |
initializes the python object. This separates in-memory object |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
77 |
initialization from methods that actually go do stuff to the system. |
1987
6fa18b7a0af6
19158668 associating a new floating ip removes existing ipnat rules and re-adds them
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1977
diff
changeset
|
78 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
79 |
:param process_monitor: The agent's process monitor instance. |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
80 |
""" |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
81 |
self.process_monitor = process_monitor |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
82 |
self.radvd = ra.NDPD(self.router_id, self.get_internal_device_name) |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1760
diff
changeset
|
83 |
|
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
84 |
def get_internal_device_name(self, port_id): |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
85 |
# Because of the way how dnsmasq works on Solaris, the length |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
86 |
# of datalink name cannot exceed 16 (includes terminating nul |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
87 |
# character). So, the linkname can only have 15 characters and |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
88 |
# the last two characters are set aside for '_0'. So, we only |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
89 |
# have 13 characters left. |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
90 |
dname = (INTERNAL_DEV_PREFIX + port_id)[:13] |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
91 |
dname += '_0' |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
92 |
return dname.replace('-', '_') |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
93 |
|
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
94 |
def get_external_device_name(self, port_id): |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1760
diff
changeset
|
95 |
# please see the comment above |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
96 |
dname = (EXTERNAL_DEV_PREFIX + port_id)[:13] |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
97 |
dname += '_0' |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
98 |
return dname.replace('-', '_') |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
99 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
100 |
def update_routing_table(self, operation, route): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
101 |
if operation == 'replace': |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
102 |
operation = 'change' |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
103 |
cmd = ['/usr/sbin/route', 'get', route['destination']] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
104 |
try: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
105 |
utils.execute(cmd, log_fail_as_error=False) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
106 |
except: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
107 |
operation = 'add' |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
108 |
cmd = ['/usr/sbin/route', operation, route['destination'], |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
109 |
route['nexthop']] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
110 |
utils.execute(cmd) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
111 |
else: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
112 |
assert operation == 'delete' |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
113 |
cmd = ['/usr/sbin/route', 'delete', route['destination'], |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
114 |
route['nexthop']] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
115 |
utils.execute(cmd) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
116 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
117 |
def _add_floating_ip_rules(self, interface_name, fip, fip_statuses): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
118 |
fixed_ip = fip['fixed_ip_address'] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
119 |
fip_ip = fip['floating_ip_address'] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
120 |
for ipnet, gwportname in self.ipnet_gwportname.iteritems(): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
121 |
if fixed_ip in ipnet: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
122 |
break |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
123 |
else: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
124 |
fip_statuses[fip['id']] = l3_constants.FLOATINGIP_STATUS_ERROR |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
125 |
LOG.warn(_("Unable to configure IP address for floating IP(%s)" |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
126 |
" '%s' for '%s'") % (fip['id'], fip_ip, fixed_ip)) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
127 |
return False |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
128 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
129 |
label = 'fip_%s' % str(fip_ip) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
130 |
fip_rules = ['pass out quick from %s to any nat-to %s static-port ' |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
131 |
'label %s_out reply-to %s@%s' % (fixed_ip, fip_ip, label, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
132 |
fixed_ip, gwportname)] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
133 |
fip_rules.append('pass in quick from any to %s rdr-to %s label %s_in ' |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
134 |
'route-to %s@%s' % (fip_ip, fixed_ip, label, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
135 |
fixed_ip, gwportname)) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
136 |
self.pf.add_rules(fip_rules, [interface_name, fip_ip]) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
137 |
return True |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
138 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
139 |
def process_floating_ip_addresses(self, interface_name): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
140 |
"""Configure IP addresses on router's external gateway interface. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
141 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
142 |
Ensures addresses for existing floating IPs and cleans up |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
143 |
those that should not longer be configured. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
144 |
""" |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
145 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
146 |
fip_statuses = {} |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
147 |
if interface_name is None: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
148 |
LOG.debug('No Interface for floating IPs router: %s', |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
149 |
self.router['id']) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
150 |
return fip_statuses |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
151 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
152 |
ipintf = net_lib.IPInterface(interface_name) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
153 |
ipaddr_list = ipintf.ipaddr_list()['static'] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
154 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
155 |
existing_cidrs = set(ipaddr_list) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
156 |
new_cidrs = set() |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
157 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
158 |
floating_ips = self.get_floating_ips() |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
159 |
# Loop once to ensure that floating ips are configured. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
160 |
for fip in floating_ips: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
161 |
fixed_ip = fip['fixed_ip_address'] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
162 |
fip_ip = fip['floating_ip_address'] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
163 |
fip_cidr = str(fip_ip) + FLOATING_IP_CIDR_SUFFIX |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
164 |
new_cidrs.add(fip_cidr) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
165 |
fip_statuses[fip['id']] = l3_constants.FLOATINGIP_STATUS_ACTIVE |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
166 |
if fip_cidr not in existing_cidrs: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
167 |
try: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
168 |
ipintf.create_address(fip_cidr, ifcheck=False, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
169 |
addrcheck=False) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
170 |
if not self._add_floating_ip_rules(interface_name, fip, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
171 |
fip_statuses): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
172 |
continue |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
173 |
net_lib.send_ip_addr_adv_notif(interface_name, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
174 |
fip['floating_ip_address'], |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
175 |
self.agent_conf) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
176 |
except Exception as err: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
177 |
# any exception occurred here should cause the floating IP |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
178 |
# to be set in error state |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
179 |
fip_statuses[fip['id']] = ( |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
180 |
l3_constants.FLOATINGIP_STATUS_ERROR) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
181 |
LOG.warn(_("Unable to configure IP address for " |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
182 |
"floating IP: %s: %s") % (fip['id'], err)) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
183 |
# remove the fip_cidr address if it was added |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
184 |
try: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
185 |
ipintf.delete_address(fip_cidr) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
186 |
except: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
187 |
pass |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
188 |
continue |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
189 |
else: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
190 |
existing_anchor_rules = self.pf.list_anchor_rules( |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
191 |
[interface_name, fip_ip]) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
192 |
# check if existing fip has been reassigned |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
193 |
fip_reassigned = any([fixed_ip not in rule for rule in |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
194 |
existing_anchor_rules]) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
195 |
if fip_reassigned: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
196 |
LOG.debug("Floating ip '%s' reassigned to '%s'", |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
197 |
fip_ip, fixed_ip) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
198 |
# flush rules associated with old fixed_ip and add |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
199 |
# new rules for the new fixed_ip |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
200 |
self.pf.remove_anchor([interface_name, fip_ip]) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
201 |
if not self._add_floating_ip_rules(interface_name, fip, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
202 |
fip_statuses): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
203 |
continue |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
204 |
elif fip_statuses[fip['id']] == fip['status']: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
205 |
# mark the status as not changed. we can't remove it |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
206 |
# because that's how the caller determines that it was |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
207 |
# removed (TODO(gmoodalb): check this) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
208 |
fip_statuses[fip['id']] = router.FLOATINGIP_STATUS_NOCHANGE |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
209 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
210 |
LOG.debug("Floating ip %(id)s added, status %(status)s", |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
211 |
{'id': fip['id'], |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
212 |
'status': fip_statuses.get(fip['id'])}) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
213 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
214 |
# Clean up addresses that no longer belong on the gateway interface and |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
215 |
# remove the binat-to PF rule associated with them |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
216 |
for ip_cidr in existing_cidrs - new_cidrs: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
217 |
if ip_cidr.endswith(FLOATING_IP_CIDR_SUFFIX): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
218 |
LOG.debug("Removing floating ip %s from interface %s", |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
219 |
ip_cidr, ipintf) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
220 |
self.pf.remove_anchor([interface_name, ip_cidr.split('/')[0]]) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
221 |
ipintf.delete_address(ip_cidr, addrcheck=False) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
222 |
return fip_statuses |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
223 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
224 |
def delete(self, agent): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
225 |
self.router['gw_port'] = None |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
226 |
self.router[l3_constants.INTERFACE_KEY] = [] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
227 |
self.router[l3_constants.FLOATINGIP_KEY] = [] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
228 |
self.process_delete(agent) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
229 |
self.disable_radvd() |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
230 |
|
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
231 |
def internal_network_added(self, port): |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
232 |
internal_dlname = self.get_internal_device_name(port['id']) |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
233 |
LOG.debug("adding internal network: port(%s), interface(%s)", |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
234 |
port['id'], internal_dlname) |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
235 |
# driver just returns if datalink and IP interface already exists |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
236 |
self.driver.plug(port['tenant_id'], port['network_id'], port['id'], |
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
|
237 |
internal_dlname, port['mac_address'], |
6153
e1758cabe679
23549840 Unable to create dhcp and l3 vnics with EVS interface driver
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents:
6123
diff
changeset
|
238 |
vif_type=port.get('binding:vif_type')) |
6031
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
239 |
fixed_ips = port['fixed_ips'] |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
240 |
ip_cidrs = common_utils.fixed_ip_cidrs(fixed_ips) |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
241 |
self.driver.init_l3(internal_dlname, ip_cidrs) |
6031
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
242 |
for fixed_ip in fixed_ips: |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
243 |
net_lib.send_ip_addr_adv_notif(internal_dlname, |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
244 |
fixed_ip['ip_address'], |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
245 |
self.agent_conf) |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
246 |
|
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
247 |
port_subnet = port['subnets'][0]['cidr'] |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
248 |
ipversion = netaddr.IPNetwork(port_subnet).version |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
249 |
rules = [] |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
250 |
# if metadata is enabled, then we need to redirect all the packets |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
251 |
# arriving at 169.254.169.254:80 to neutron-metadata-proxy server |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
252 |
# listening at self.agent_conf.metadata_port |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
253 |
if self.agent_conf.enable_metadata_proxy and ipversion == 4: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
254 |
rules.append('pass in quick proto tcp to 169.254.169.254/32 ' |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
255 |
'port 80 rdr-to 127.0.0.1 port %s label metadata_%s' |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
256 |
% (self.agent_conf.metadata_port, internal_dlname)) |
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
257 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
258 |
# Since we support shared router model, we need to block the new |
5579
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
259 |
# internal port from reaching other tenant's ports. However, if |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
260 |
# allow_forwarding_between_networks is set, then we need to |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
261 |
# allow forwarding of packets between same tenant's ports. |
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
262 |
block_tblname = 'block_%s' % internal_dlname |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
263 |
rules.append('block in quick to <%s> label %s' % |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
264 |
(block_tblname, block_tblname)) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
265 |
if self.agent_conf.allow_forwarding_between_networks: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
266 |
allow_tblname = 'allow_%s' % internal_dlname |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
267 |
rules.append('pass in quick to <%s> reply-to %s label %s' % |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
268 |
(allow_tblname, internal_dlname, allow_tblname)) |
5579
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
269 |
|
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
270 |
# finally add all the rules in one shot |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
271 |
self.pf.add_rules(rules, [internal_dlname, 'normal']) |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
272 |
|
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
273 |
ex_gw_port = self.ex_gw_port |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
274 |
if not ex_gw_port: |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
275 |
return |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
276 |
|
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
277 |
ex_gw_ip = ex_gw_port['subnets'][0]['gateway_ip'] |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
278 |
if not ex_gw_ip: |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
279 |
return |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
280 |
|
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
281 |
if netaddr.IPAddress(ex_gw_ip).version != 4 or ipversion != 4: |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
282 |
return |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
283 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
284 |
# if the external gateway is already setup for the shared router, |
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
285 |
# then we need to add Policy Based Routing (PBR) for both inbound |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
286 |
# and outbound for this internal network |
5579
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
287 |
external_dlname = self.get_external_device_name(ex_gw_port['id']) |
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
288 |
label = 'pbr_%s' % internal_dlname |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
289 |
pbr_rules = ['pass in quick to !%s route-to {(%s %s)} label %s_in' % |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
290 |
(port_subnet, external_dlname, ex_gw_ip, label)] |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
291 |
pbr_rules.append('pass out quick received-on %s reply-to %s@%s ' |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
292 |
'label %s_out' % (external_dlname, ex_gw_ip, |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
293 |
external_dlname, label)) |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
294 |
|
5579
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
295 |
self.pf.add_rules(pbr_rules, [internal_dlname, 'pbr']) |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
296 |
if self._snat_enabled: |
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
297 |
ex_gw_port_ip = ex_gw_port['fixed_ips'][0]['ip_address'] |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
298 |
label = 'snat_%s' % internal_dlname |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
299 |
snat_rule = ('pass out quick from %s to any nat-to %s label %s ' |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
300 |
'reply-to %s' % (port_subnet, ex_gw_port_ip, label, |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
301 |
internal_dlname)) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
302 |
self.pf.add_rules([snat_rule], [external_dlname, internal_dlname]) |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
303 |
|
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
304 |
def internal_network_removed(self, port): |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
305 |
internal_dlname = self.get_internal_device_name(port['id']) |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
306 |
LOG.debug("removing internal network: port(%s) interface(%s)", |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
307 |
port['id'], internal_dlname) |
5579
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
308 |
# remove the anchor and tables associated with this internal port |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
309 |
self.pf.remove_anchor_recursively([internal_dlname]) |
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
310 |
if self.ex_gw_port and self._snat_enabled: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
311 |
external_dlname = self.\ |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
312 |
get_external_device_name(self.ex_gw_port['id']) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
313 |
self.pf.remove_anchor_recursively([external_dlname, |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
314 |
internal_dlname]) |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
315 |
if net_lib.Datalink.datalink_exists(internal_dlname): |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
316 |
self.driver.unplug(internal_dlname) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
317 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
318 |
def _get_existing_devices(self): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
319 |
return net_lib.Datalink.show_link() |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
320 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
321 |
def internal_network_updated(self, interface_name, ip_cidrs): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
322 |
pass |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
323 |
|
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
324 |
def _apply_common_rules(self, all_subnets, internal_ports): |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
325 |
v4_subnets = [subnet for subnet in all_subnets |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
326 |
if netaddr.IPNetwork(subnet).version == 4] |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
327 |
if not v4_subnets: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
328 |
return |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
329 |
|
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
330 |
# add rule for metadata and broadcast |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
331 |
allsubnets_tblname = "all_v4_subnets" |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
332 |
common_aname = "common" |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
333 |
self.pf.replace_table_entry(allsubnets_tblname, v4_subnets, |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
334 |
[common_aname]) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
335 |
rules = [] |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
336 |
# don't forward broadcast packets out of the internal subnet |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
337 |
rules.append('pass in quick from <%s> to 255.255.255.255 label ' |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
338 |
'%s_bcast' % (allsubnets_tblname, common_aname)) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
339 |
self.pf.add_rules(rules, [common_aname]) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
340 |
|
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
341 |
def _pre_setup_pf_rules(self, new_ports, old_ports, internal_ports): |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
342 |
"""We are going to do some amount of book keeping (for later use) and |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
343 |
also pre-setup PF skeleton rules ahead of time to improve PF setup |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
344 |
time. |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
345 |
""" |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
346 |
|
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
347 |
# Process PF anchor rules for internal ports in bulk as this |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
348 |
# significantly improves the PF setup time. Capture the anchor |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
349 |
# rules that will be placed under _auto/neutron:l3:agent. |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
350 |
new_anchor_rules = set() |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
351 |
for p in new_ports: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
352 |
port_id = p['id'] |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
353 |
tenant_id = p['tenant_id'] |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
354 |
subnet = p['subnets'][0]['cidr'] |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
355 |
internal_dlname = self.get_internal_device_name(port_id) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
356 |
anchor_rule = 'anchor "%s/*" on %s all' % (internal_dlname, |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
357 |
internal_dlname) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
358 |
new_anchor_rules.add(anchor_rule) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
359 |
ipnet = netaddr.IPNetwork(subnet) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
360 |
if ipnet.version == 4: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
361 |
self.ipnet_gwportname[ipnet] = internal_dlname |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
362 |
# Capture all the subnets across all tenants and subnets |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
363 |
# per-tenant. We will setup PF tables for each internal network |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
364 |
# ahead of time |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
365 |
self.tenant_subnets['all_tenants'].add(subnet) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
366 |
if tenant_id not in self.tenant_subnets: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
367 |
self.tenant_subnets[tenant_id] = set() |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
368 |
self.tenant_subnets[tenant_id].add(subnet) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
369 |
|
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
370 |
old_anchor_rules = set() |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
371 |
for p in old_ports: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
372 |
port_id = p['id'] |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
373 |
tenant_id = p['tenant_id'] |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
374 |
subnet = p['subnets'][0]['cidr'] |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
375 |
internal_dlname = self.get_internal_device_name(port_id) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
376 |
anchor_rule = 'anchor "%s/*" on %s all' % (internal_dlname, |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
377 |
internal_dlname) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
378 |
old_anchor_rules.add(anchor_rule) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
379 |
ipnet = netaddr.IPNetwork(subnet) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
380 |
if ipnet.version == 4: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
381 |
self.ipnet_gwportname.pop(ipnet, None) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
382 |
self.tenant_subnets['all_tenants'].discard(subnet) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
383 |
if tenant_id in self.tenant_subnets: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
384 |
self.tenant_subnets[tenant_id].discard(subnet) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
385 |
|
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
386 |
existing_anchor_rules = set(self.pf.list_anchor_rules()) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
387 |
final_anchor_rules = ((existing_anchor_rules | new_anchor_rules) - |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
388 |
old_anchor_rules) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
389 |
# add an anchor rule to capture rules common amongst all the |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
390 |
# internal ports under 'common' anchor |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
391 |
if internal_ports: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
392 |
final_anchor_rules.add('anchor "common" all') |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
393 |
# add rule for metadata and broadcast for all tenant's networks |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
394 |
self._apply_common_rules(self.tenant_subnets['all_tenants'], |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
395 |
internal_ports) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
396 |
else: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
397 |
final_anchor_rules.discard('anchor "common" all') |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
398 |
# Now that there are no internal ports, remove the common anchor |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
399 |
# that captures rules common amongst all the internal ports |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
400 |
self.pf.remove_anchor_recursively(['common']) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
401 |
self.pf.add_rules(list(sorted(final_anchor_rules))) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
402 |
|
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
403 |
# Since we support shared router model, we need to block the new |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
404 |
# internal port from reaching other tenant's ports. However, if |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
405 |
# allow_forwarding_between_networks is set, then we need to |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
406 |
# allow forwarding of packets between same tenant's ports |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
407 |
block_subnets = set() |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
408 |
allow_subnets = set() |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
409 |
for p in internal_ports: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
410 |
subnet = p['subnets'][0]['cidr'] |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
411 |
tenant_id = p['tenant_id'] |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
412 |
if self.agent_conf.allow_forwarding_between_networks: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
413 |
allow_subnets = self.tenant_subnets[tenant_id] - set([subnet]) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
414 |
block_subnets = (self.tenant_subnets['all_tenants'] - |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
415 |
self.tenant_subnets[tenant_id]) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
416 |
else: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
417 |
block_subnets = (self.tenant_subnets['all_tenants'] - |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
418 |
set([subnet])) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
419 |
# add table entry in the global scope |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
420 |
internal_dlname = self.get_internal_device_name(p['id']) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
421 |
block_tblname = "block_%s" % internal_dlname |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
422 |
self.pf.replace_table_entry(block_tblname, list(block_subnets), |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
423 |
[internal_dlname, 'normal']) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
424 |
if allow_subnets: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
425 |
allow_tblname = "allow_%s" % internal_dlname |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
426 |
self.pf.replace_table_entry(allow_tblname, list(allow_subnets), |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
427 |
[internal_dlname, 'normal']) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
428 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
429 |
def _process_internal_ports(self, pd): |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
430 |
existing_port_ids = set([p['id'] for p in self.internal_ports]) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
431 |
|
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
432 |
internal_ports = self.router.get(l3_constants.INTERFACE_KEY, []) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
433 |
current_port_ids = set([p['id'] for p in internal_ports |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
434 |
if p['admin_state_up']]) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
435 |
|
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
436 |
new_port_ids = current_port_ids - existing_port_ids |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
437 |
new_ports = [p for p in internal_ports if p['id'] in new_port_ids] |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
438 |
old_ports = [p for p in self.internal_ports if |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
439 |
p['id'] not in current_port_ids] |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
440 |
# updated_ports = self._get_updated_ports(self.internal_ports, |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
441 |
# internal_ports) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
442 |
|
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
443 |
if old_ports or new_ports: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
444 |
self._pre_setup_pf_rules(new_ports, old_ports, internal_ports) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
445 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
446 |
enable_ra = False |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
447 |
for p in new_ports: |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
448 |
self.internal_network_added(p) |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
449 |
LOG.debug("appending port %s to internal_ports cache", p) |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
450 |
self.internal_ports.append(p) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
451 |
enable_ra = enable_ra or self._port_has_ipv6_subnet(p) |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
452 |
for subnet in p['subnets']: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
453 |
if ipv6_utils.is_ipv6_pd_enabled(subnet): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
454 |
interface_name = self.get_internal_device_name(p['id']) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
455 |
pd.enable_subnet(self.router_id, subnet['id'], |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
456 |
subnet['cidr'], |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
457 |
interface_name, p['mac_address']) |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
458 |
|
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
459 |
for p in old_ports: |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
460 |
self.internal_network_removed(p) |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
461 |
LOG.debug("removing port %s from internal_ports cache", p) |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
462 |
self.internal_ports.remove(p) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
463 |
enable_ra = enable_ra or self._port_has_ipv6_subnet(p) |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
464 |
for subnet in p['subnets']: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
465 |
if ipv6_utils.is_ipv6_pd_enabled(subnet): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
466 |
pd.disable_subnet(self.router_id, subnet['id']) |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
467 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
468 |
# updated_cidres = [] |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
469 |
# if updated_ports: |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
470 |
# for index, p in enumerate(internal_ports): |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
471 |
# if not updated_ports.get(p['id']): |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
472 |
# continue |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
473 |
# self.internal_ports[index] = updated_ports[p['id']] |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
474 |
# interface_name = self.get_internal_device_name(p['id']) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
475 |
# ip_cidrs = common_utils.fixed_ip_cidrs(p['fixed_ips']) |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
476 |
# LOG.debug("updating internal network for port %s", p) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
477 |
# updated_cidrs += ip_cidrs |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
478 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
479 |
# self.driver.init_l3(interface_name, ip_cidrs=ip_cidrs, |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
480 |
# namespace=self.ns_name) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
481 |
# enable_ra = enable_ra or self._port_has_ipv6_subnet(p) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
482 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
483 |
# # Check if there is any pd prefix update |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
484 |
# for p in internal_ports: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
485 |
# if p['id'] in (set(current_port_ids) & set(existing_port_ids)): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
486 |
# for subnet in p.get('subnets', []): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
487 |
# if ipv6_utils.is_ipv6_pd_enabled(subnet): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
488 |
# old_prefix = pd.update_subnet(self.router_id, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
489 |
# subnet['id'], |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
490 |
# subnet['cidr']) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
491 |
# if old_prefix: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
492 |
# self._internal_network_updated(p, subnet['id'], |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
493 |
# subnet['cidr'], |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
494 |
# old_prefix, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
495 |
# updated_cidrs) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
496 |
# enable_ra = True |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
497 |
# Enable RA |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
498 |
if enable_ra: |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
499 |
self.radvd.enable(internal_ports) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
500 |
|
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
501 |
# remove any internal stale router interfaces (i.e., l3i.. VNICs) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
502 |
existing_devices = self._get_existing_devices() |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
503 |
current_internal_devs = set(n for n in existing_devices |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
504 |
if n.startswith(INTERNAL_DEV_PREFIX)) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
505 |
current_port_devs = set(self.get_internal_device_name(port_id) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
506 |
for port_id in current_port_ids) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
507 |
stale_devs = current_internal_devs - current_port_devs |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
508 |
for stale_dev in stale_devs: |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
509 |
LOG.debug(_('Deleting stale internal router device: %s'), |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
510 |
stale_dev) |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
511 |
pd.remove_stale_ri_ifname(self.router_id, stale_dev) |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
512 |
self.driver.unplug(stale_dev) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
513 |
|
6031
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
514 |
# TODO(gmoodalb): need to do more work on ipv6 gateway |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
515 |
def external_gateway_added(self, ex_gw_port, external_dlname): |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
516 |
LOG.debug("External gateway added: port(%s), interface(%s)", |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
517 |
ex_gw_port, external_dlname) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
518 |
# TODO(gmoodalb): add MTU to plug()? |
6031
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
519 |
self.driver.plug(ex_gw_port['tenant_id'], ex_gw_port['network_id'], |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
520 |
ex_gw_port['id'], external_dlname, |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
521 |
ex_gw_port['mac_address'], |
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
|
522 |
bridge=self.agent_conf.external_network_bridge, |
6153
e1758cabe679
23549840 Unable to create dhcp and l3 vnics with EVS interface driver
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents:
6123
diff
changeset
|
523 |
vif_type=ex_gw_port.get('binding:vif_type')) |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
524 |
ip_cidrs = common_utils.fixed_ip_cidrs(ex_gw_port['fixed_ips']) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
525 |
self.driver.init_l3(external_dlname, ip_cidrs) |
6031
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
526 |
for fixed_ip in ex_gw_port['fixed_ips']: |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
527 |
net_lib.send_ip_addr_adv_notif(external_dlname, |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
528 |
fixed_ip['ip_address'], |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
529 |
self.agent_conf) |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1760
diff
changeset
|
530 |
|
5579
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
531 |
# add nested anchor rule first |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
532 |
anchor_option = "on %s" % external_dlname |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
533 |
self.pf.add_nested_anchor_rule(None, external_dlname, anchor_option) |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
534 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
535 |
gw_ip = ex_gw_port['subnets'][0]['gateway_ip'] |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1760
diff
changeset
|
536 |
if gw_ip: |
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1760
diff
changeset
|
537 |
cmd = ['/usr/bin/pfexec', '/usr/sbin/route', 'add', 'default', |
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1760
diff
changeset
|
538 |
gw_ip] |
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
2174
diff
changeset
|
539 |
stdout = utils.execute(cmd, extra_ok_codes=[errno.EEXIST]) |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
540 |
if 'entry exists' not in stdout: |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
541 |
self.remove_route = True |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1760
diff
changeset
|
542 |
|
5579
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
543 |
# for each of the internal ports, add Policy Based Routing (PBR) |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
544 |
# rule iff ex_gw_ip is IPv4 and the internal port is IPv4 |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
545 |
if netaddr.IPAddress(gw_ip).version != 4: |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
546 |
return |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
547 |
for port in self.internal_ports: |
5579
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
548 |
port_subnet = port['subnets'][0]['cidr'] |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
549 |
if netaddr.IPNetwork(port_subnet).version != 4: |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
550 |
continue |
2083
87196737f09f
19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1987
diff
changeset
|
551 |
internal_dlname = self.get_internal_device_name(port['id']) |
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
552 |
label = 'pbr_%s' % internal_dlname |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
553 |
pbr_rules = ['pass in quick to !%s route-to {(%s %s)} ' |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
554 |
'label %s_in' % (port_subnet, external_dlname, |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
555 |
gw_ip, label)] |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
556 |
pbr_rules.append('pass out quick received-on %s reply-to %s@%s' |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
557 |
' label %s_out' % (external_dlname, gw_ip, |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
558 |
external_dlname, label)) |
5579
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
559 |
self.pf.add_rules(pbr_rules, [internal_dlname, 'pbr']) |
2083
87196737f09f
19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1987
diff
changeset
|
560 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
561 |
def external_gateway_updated(self, ex_gw_port, external_dlname): |
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
2174
diff
changeset
|
562 |
# There is nothing to do on Solaris |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
2174
diff
changeset
|
563 |
pass |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1760
diff
changeset
|
564 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
565 |
def external_gateway_removed(self, ex_gw_port, external_dlname): |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
566 |
LOG.debug("External gateway removed: port(%s), interface(%s)", |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
567 |
ex_gw_port, external_dlname) |
5579
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
568 |
# remove nested anchor rule first |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
569 |
self.pf.remove_nested_anchor_rule(None, external_dlname) |
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
570 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
571 |
gw_ip = ex_gw_port['subnets'][0]['gateway_ip'] |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1760
diff
changeset
|
572 |
if gw_ip: |
2083
87196737f09f
19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1987
diff
changeset
|
573 |
# remove PBR rules |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
574 |
for port in self.internal_ports: |
2083
87196737f09f
19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1987
diff
changeset
|
575 |
internal_dlname = self.get_internal_device_name(port['id']) |
5579
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
576 |
self.pf.remove_anchor([internal_dlname, 'pbr']) |
2083
87196737f09f
19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1987
diff
changeset
|
577 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
578 |
if self.remove_route: |
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
2174
diff
changeset
|
579 |
cmd = ['/usr/bin/pfexec', '/usr/sbin/route', 'delete', |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
2174
diff
changeset
|
580 |
'default', gw_ip] |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
2174
diff
changeset
|
581 |
utils.execute(cmd, check_exit_code=False) |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
582 |
|
2083
87196737f09f
19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1987
diff
changeset
|
583 |
if net_lib.Datalink.datalink_exists(external_dlname): |
6031
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
584 |
self.driver.unplug(external_dlname, |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
585 |
self.agent_conf.external_network_bridge) |
2083
87196737f09f
19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1987
diff
changeset
|
586 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
587 |
def _process_external_gateway(self, ex_gw_port, pd): |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
588 |
# TODO(Carl) Refactor to clarify roles of ex_gw_port vs self.ex_gw_port |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
589 |
ex_gw_port_id = (ex_gw_port and ex_gw_port['id'] or |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
590 |
self.ex_gw_port and self.ex_gw_port['id']) |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
591 |
|
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
592 |
ex_gw_port_status = None |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
593 |
interface_name = None |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
594 |
if ex_gw_port_id: |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
595 |
interface_name = self.get_external_device_name(ex_gw_port_id) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
596 |
if ex_gw_port: |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
597 |
if not self.ex_gw_port: |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
598 |
self.external_gateway_added(ex_gw_port, interface_name) |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
599 |
pd.add_gw_interface(self.router['id'], interface_name) |
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
600 |
ex_gw_port_status = 'added' |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
601 |
elif not self._gateway_ports_equal(ex_gw_port, self.ex_gw_port): |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
602 |
self.external_gateway_updated(ex_gw_port, interface_name) |
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
603 |
ex_gw_port_status = 'updated' |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
604 |
elif not ex_gw_port and self.ex_gw_port: |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
605 |
self.external_gateway_removed(self.ex_gw_port, interface_name) |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
606 |
pd.remove_gw_interface(self.router['id']) |
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
607 |
ex_gw_port_status = 'removed' |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
608 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
609 |
# Remove any external stale router interfaces (i.e., l3e.. VNICs) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
610 |
existing_devices = self._get_existing_devices() |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
611 |
stale_devs = [dev for dev in existing_devices |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
612 |
if dev.startswith(EXTERNAL_DEV_PREFIX) and |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
613 |
dev != interface_name] |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
614 |
for stale_dev in stale_devs: |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
615 |
LOG.debug(_('Deleting stale external router device: %s'), |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
616 |
stale_dev) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
617 |
self.driver.unplug(stale_dev) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
618 |
|
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
619 |
# Process SNAT rules for external gateway |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
620 |
gw_port = self._router.get('gw_port') |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
621 |
self._handle_router_snat_rules(gw_port, interface_name, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
622 |
ex_gw_port_status) |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
623 |
|
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
624 |
def external_gateway_snat_rules(self, ex_gw_port_ip, external_dlname): |
5579
48110757c6c6
PSARC/2016/116 OpenStack Neutron support for Packet Filter
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
625 |
rules = {} |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
626 |
for port in self.internal_ports: |
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
627 |
ip_cidr = port['subnets'][0]['cidr'] |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
628 |
if netaddr.IPNetwork(ip_cidr).version == 4: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
629 |
internal_dlname = self.get_internal_device_name(port['id']) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
630 |
label = 'snat_%s' % internal_dlname |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
631 |
rule = ('pass out quick from %s to any nat-to %s label %s ' |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
632 |
'reply-to %s' % (ip_cidr, ex_gw_port_ip, label, |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
633 |
internal_dlname)) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
634 |
rules[internal_dlname] = [rule] |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
635 |
|
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
636 |
return rules |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
637 |
|
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
638 |
def _handle_router_snat_rules(self, ex_gw_port, external_dlname, |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
639 |
ex_gw_port_status): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
640 |
# Todo(gmoodalb): need this when we support address_scope |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
641 |
# self.process_external_port_address_scope_routing(iptables_manager) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
642 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
643 |
# Remove all the old SNAT rules |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
644 |
# This is safe because if use_namespaces is set as False |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
645 |
# then the agent can only configure one router, otherwise |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
646 |
# each router's SNAT rules will be in their own namespace |
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
647 |
if ex_gw_port_status in ['removed', 'updated']: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
648 |
snat_anchors = self.pf.list_anchors([external_dlname]) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
649 |
for snat_anchor in snat_anchors: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
650 |
if "/l3i" in snat_anchor: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
651 |
self.pf.remove_anchor(snat_anchor.split('/')[-2:]) |
2083
87196737f09f
19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1987
diff
changeset
|
652 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
653 |
# And add them back if the action is add_rules |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
654 |
if ex_gw_port_status in ['added', 'updated']: |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
655 |
# NAT rules are added only if ex_gw_port has an IPv4 address |
6555
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
656 |
ex_gw_port_ip = ex_gw_port['fixed_ips'][0]['ip_address'] |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
657 |
if netaddr.IPAddress(ex_gw_port_ip).version != 4: |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
658 |
return |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
659 |
port_rules = self.external_gateway_snat_rules(ex_gw_port_ip, |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
660 |
external_dlname) |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
661 |
for internal_dlname, rules in port_rules.iteritems(): |
321727f908b3
22724517 neutron L3 agent takes a very long time to (re)build virtual network topology
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6184
diff
changeset
|
662 |
self.pf.add_rules(rules, [external_dlname, internal_dlname]) |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
663 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
664 |
def process_external(self, agent): |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
665 |
fip_statuses = {} |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
666 |
try: |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
667 |
ex_gw_port = self.get_ex_gw_port() |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
668 |
self._process_external_gateway(ex_gw_port, agent.pd) |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
669 |
# TODO(Carl) Return after setting existing_floating_ips and |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
670 |
# still call update_fip_statuses? |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
671 |
if not ex_gw_port: |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
672 |
return |
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
2174
diff
changeset
|
673 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
674 |
# Once NAT rules for floating IPs are safely in place |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
675 |
# configure their addresses on the external gateway port |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
676 |
interface_name = self.get_external_device_name(ex_gw_port['id']) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
677 |
fip_statuses = self.configure_fip_addresses(interface_name) |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
678 |
except n_exc.FloatingIpSetupException: |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
679 |
# All floating IPs must be put in error state |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
680 |
LOG.exception(_LE("Failed to process floating IPs.")) |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
681 |
fip_statuses = self.put_fips_in_error_state() |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
682 |
finally: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
683 |
self.update_fip_statuses(agent, fip_statuses) |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
684 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
685 |
def process_external_port_address_scope_routing(self, iptables_manager): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
686 |
pass |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
687 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
688 |
def process_address_scope(self): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
689 |
pass |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
690 |
|
2083
87196737f09f
19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1987
diff
changeset
|
691 |
|
6561
6c1204ee2522
24415249 hg rename agent/evs_l3_agent.py to agent/l3/solaris_agent.py
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6555
diff
changeset
|
692 |
class L3NATAgent(l3_agent.L3NATAgentWithStateReport): |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
693 |
OPTS = [ |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
694 |
cfg.BoolOpt('allow_forwarding_between_networks', default=False, |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
695 |
help=_("Allow forwarding of packets between tenant's " |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
696 |
"networks")), |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
697 |
] |
2083
87196737f09f
19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1987
diff
changeset
|
698 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
699 |
def __init__(self, host, conf=None): |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
700 |
cfg.CONF.register_opts(self.OPTS) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
701 |
cfg.CONF.register_opts(interface.OPTS) |
6561
6c1204ee2522
24415249 hg rename agent/evs_l3_agent.py to agent/l3/solaris_agent.py
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6555
diff
changeset
|
702 |
super(L3NATAgent, self).__init__(host=host, conf=conf) |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
703 |
cfg.CONF.register_opts(neutron_vpnaas.vpn_agent_opts, 'vpnagent') |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
704 |
self.service = vpn_service.VPNService(self) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
705 |
self.device_drivers = self.service.load_device_drivers(host) |
2083
87196737f09f
19571319 datalink protection kicks in if L3 agent and DHCP agent are on the same m/c
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1987
diff
changeset
|
706 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
707 |
def _check_config_params(self): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
708 |
"""Check items in configuration files. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
709 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
710 |
Check for required and invalid configuration items. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
711 |
The actual values are not verified for correctness. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
712 |
""" |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
713 |
if not self.conf.interface_driver: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
714 |
msg = _LE('An interface driver must be specified') |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
715 |
LOG.error(msg) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
716 |
raise SystemExit(1) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
717 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
718 |
if not self.conf.router_id: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
719 |
msg = _LE('Router id (router_id) is required to be set.') |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
720 |
LOG.error(msg) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
721 |
raise SystemExit(1) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
722 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
723 |
if self.conf.ipv6_gateway: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
724 |
# ipv6_gateway configured. Check for valid v6 link-local address. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
725 |
try: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
726 |
msg = _LE("%s used in config as ipv6_gateway is not a valid " |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
727 |
"IPv6 link-local address."), |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
728 |
ip_addr = netaddr.IPAddress(self.conf.ipv6_gateway) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
729 |
if ip_addr.version != 6 or not ip_addr.is_link_local(): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
730 |
LOG.error(msg, self.conf.ipv6_gateway) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
731 |
raise SystemExit(1) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
732 |
except netaddr.AddrFormatError: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
733 |
LOG.error(msg, self.conf.ipv6_gateway) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
734 |
raise SystemExit(1) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
735 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
736 |
def _router_added(self, router_id, router): |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
737 |
args = [] |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
738 |
kwargs = { |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
739 |
'router_id': router_id, |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
740 |
'router': router, |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
741 |
'use_ipv6': self.use_ipv6, |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
742 |
'agent_conf': self.conf, |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
743 |
'interface_driver': self.driver, |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
744 |
} |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
745 |
ri = SolarisRouterInfo(*args, **kwargs) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
746 |
registry.notify(resources.ROUTER, events.BEFORE_CREATE, |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
747 |
self, router=ri) |
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
2174
diff
changeset
|
748 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
749 |
self.router_info[router_id] = ri |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
750 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
751 |
ri.initialize(self.process_monitor) |
6031
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
752 |
|
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
753 |
def _process_router_if_compatible(self, router): |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
754 |
if (self.conf.external_network_bridge and not ovs_lib.BaseOVS(). |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
755 |
bridge_exists(self.conf.external_network_bridge)): |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
756 |
LOG.error(_("The external network bridge '%s' does not exist"), |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
757 |
self.conf.external_network_bridge) |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
758 |
return |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
759 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
760 |
# We don't support namespaces so only process the router associated |
6031
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
761 |
# with the configured agent id. |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6561
diff
changeset
|
762 |
if (router['id'] != self.conf.router_id): |
6031
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
763 |
raise n_exc.RouterNotCompatibleWithAgent(router_id=router['id']) |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
764 |
|
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
765 |
# Either ex_net_id or handle_internal_only_routers must be set |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
766 |
ex_net_id = (router['external_gateway_info'] or {}).get('network_id') |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
767 |
if not ex_net_id and not self.conf.handle_internal_only_routers: |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
768 |
raise n_exc.RouterNotCompatibleWithAgent(router_id=router['id']) |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
769 |
|
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
770 |
# If target_ex_net_id and ex_net_id are set they must be equal |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
771 |
target_ex_net_id = self._fetch_external_net_id() |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
772 |
if (target_ex_net_id and ex_net_id and ex_net_id != target_ex_net_id): |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
773 |
# Double check that our single external_net_id has not changed |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
774 |
# by forcing a check by RPC. |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
775 |
if ex_net_id != self._fetch_external_net_id(force=True): |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
776 |
raise n_exc.RouterNotCompatibleWithAgent( |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
777 |
router_id=router['id']) |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
778 |
|
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
779 |
if router['id'] not in self.router_info: |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
780 |
self._process_added_router(router) |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
781 |
else: |
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5579
diff
changeset
|
782 |
self._process_updated_router(router) |