author | Rich Burridge <rich.burridge@oracle.com> |
Tue, 02 May 2017 17:33:26 -0700 | |
changeset 7964 | d9801318ed3d |
parent 7314 | 014a673c1f62 |
permissions | -rw-r--r-- |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
1 |
Changes to Neutron Open vSwitch agent to port it to Solaris. These changes |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
2 |
will eventually be proposed upstream. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
3 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
4 |
--- neutron-8.1.2/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py 2016-06-09 18:45:36.000000000 -0700 |
7238
96025c3f5cac
24939508 CDom conn. lost on LDom requiring neutron and vswitch-server restart
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6848
diff
changeset
|
5 |
+++ new/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py 2016-11-01 18:39:33.985866969 -0700 |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
6 |
@@ -15,12 +15,14 @@ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
7 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
8 |
import collections |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
9 |
import functools |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
10 |
+import platform |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
11 |
import signal |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
12 |
import sys |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
13 |
import time |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
14 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
15 |
import netaddr |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
16 |
from oslo_config import cfg |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
17 |
+from oslo_log import helpers as log_helpers |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
18 |
from oslo_log import log as logging |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
19 |
import oslo_messaging |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
20 |
from oslo_service import loopingcall |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
21 |
@@ -36,6 +38,7 @@ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
22 |
from neutron.agent.l2.extensions import manager as ext_manager |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
23 |
from neutron.agent import rpc as agent_rpc |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
24 |
from neutron.agent import securitygroups_rpc as sg_rpc |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
25 |
+from neutron.agent.solaris import net_lib |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
26 |
from neutron.api.rpc.callbacks import resources |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
27 |
from neutron.api.rpc.handlers import dvr_rpc |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
28 |
from neutron.common import config |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
29 |
@@ -145,10 +148,16 @@ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
30 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
31 |
self.fullsync = False |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
32 |
# init bridge classes with configured datapath type. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
33 |
- self.br_int_cls, self.br_phys_cls, self.br_tun_cls = ( |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
34 |
- functools.partial(bridge_classes[b], |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
35 |
- datapath_type=ovs_conf.datapath_type) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
36 |
- for b in ('br_int', 'br_phys', 'br_tun')) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
37 |
+ if platform.system() == "SunOS": |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
38 |
+ self.br_int_cls = functools.partial(bridge_classes['br_int'], |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
39 |
+ datapath_type=ovs_conf.datapath_type) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
40 |
+ self.br_phys_cls = None |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
41 |
+ self.br_tun_cls = None |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
42 |
+ else: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
43 |
+ self.br_int_cls, self.br_phys_cls, self.br_tun_cls = ( |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
44 |
+ functools.partial(bridge_classes[b], |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
45 |
+ datapath_type=ovs_conf.datapath_type) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
46 |
+ for b in ('br_int', 'br_phys', 'br_tun')) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
47 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
48 |
self.use_veth_interconnection = ovs_conf.use_veth_interconnection |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
49 |
self.veth_mtu = agent_conf.veth_mtu |
7238
96025c3f5cac
24939508 CDom conn. lost on LDom requiring neutron and vswitch-server restart
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6848
diff
changeset
|
50 |
@@ -2081,9 +2090,492 @@ |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
51 |
"in both the Agent and Server side.")) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
52 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
53 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
54 |
+class SolarisOVSNeutronAgent(OVSNeutronAgent): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
55 |
+ """Solaris implementation of OVS L2 Agent""" |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
56 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
57 |
+ def __init__(self, bridge_classes, conf=None): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
58 |
+ '''Constructor. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
59 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
60 |
+ :param bridge_classes: a dict for bridge classes. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
61 |
+ :param conf: an instance of ConfigOpts |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
62 |
+ ''' |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
63 |
+ self.tun_ofport = None |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
64 |
+ # mapping of VNIC's OpenFlow Port Number (ofport) to |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
65 |
+ # VXLAN segmentation id. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
66 |
+ self.br_port_segid = {} |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
67 |
+ # mapping of VXLAN sgementation id to set of ports on that segment. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
68 |
+ # The port is a ovs_lib.VifPort object. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
69 |
+ self.br_segid_ports = {} |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
70 |
+ # mapping of Neutron port UUID to ovs_lib.VifPort object. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
71 |
+ self.vif_ports = {} |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
72 |
+ super(SolarisOVSNeutronAgent, self).__init__(bridge_classes, conf) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
73 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
74 |
+ def _parse_bridge_mappings(self, bridge_mappings): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
75 |
+ try: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
76 |
+ return n_utils.parse_mappings(bridge_mappings, unique_values=False) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
77 |
+ except ValueError as e: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
78 |
+ raise ValueError(_("Parsing bridge_mappings failed: %s.") % e) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
79 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
80 |
+ def check_changed_vlans(self): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
81 |
+ # Not applicable to Solaris |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
82 |
+ return [] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
83 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
84 |
+ def _setup_tunnel_port(self, br, port_name, remote_ip, tunnel_type): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
85 |
+ LOG.debug(_("Setting up tunnel(%s) for remote_ip: %s") % |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
86 |
+ (tunnel_type, remote_ip)) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
87 |
+ if tunnel_type != p_const.TYPE_VXLAN: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
88 |
+ return |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
89 |
+ self.tun_br_ofports[tunnel_type][remote_ip] = remote_ip |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
90 |
+ remote_ips = self.tun_br_ofports[tunnel_type].values() |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
91 |
+ LOG.debug(_("current list of remote_ips: %s"), remote_ips) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
92 |
+ for ofport, segmentation_id in self.br_port_segid.iteritems(): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
93 |
+ flood_local_ofports = self.br_segid_ports[segmentation_id] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
94 |
+ self._mod_flood_to_tun_flows(ofport, remote_ips, segmentation_id, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
95 |
+ flood_local_ofports - set([ofport])) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
96 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
97 |
+ def cleanup_tunnel_port(self, br, remote_ip, tunnel_type): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
98 |
+ LOG.debug(_("Cleaning up tunnel(%s) for remote_ip: %s") % |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
99 |
+ (tunnel_type, remote_ip)) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
100 |
+ if tunnel_type != p_const.TYPE_VXLAN: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
101 |
+ return |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
102 |
+ self.tun_br_ofports[tunnel_type].pop(remote_ip, None) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
103 |
+ remote_ips = self.tun_br_ofports[tunnel_type].values() |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
104 |
+ for ofport, segmentation_id in self.br_port_segid.iteritems(): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
105 |
+ flood_local_ofports = self.br_segid_ports[segmentation_id] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
106 |
+ self._mod_flood_to_tun_flows(ofport, remote_ips, segmentation_id, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
107 |
+ flood_local_ofports - set([ofport])) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
108 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
109 |
+ # The following methods are called through RPC. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
110 |
+ # add_fdb_entries(), remove_fdb_entries(), update_fdb_entries() |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
111 |
+ # These methods are overridden from L2populationRpcCallBackMixin class. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
112 |
+ @log_helpers.log_method_call |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
113 |
+ def add_fdb_entries(self, context, fdb_entries, host=None): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
114 |
+ # Needed for L2 Population support. Will be added later |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
115 |
+ pass |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
116 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
117 |
+ @log_helpers.log_method_call |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
118 |
+ def remove_fdb_entries(self, context, fdb_entries, host=None): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
119 |
+ # Needed for L2 Population support. Will be added later |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
120 |
+ pass |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
121 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
122 |
+ @log_helpers.log_method_call |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
123 |
+ def update_fdb_entries(self, context, fdb_entries, host=None): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
124 |
+ # Needed for L2 Population support. Will be added later |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
125 |
+ pass |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
126 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
127 |
+ def port_dead(self, port, log_errors=True): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
128 |
+ '''Once a port has no binding or it is administratively disabled, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
129 |
+ add a flow to drop packets coming from that port. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
130 |
+ ''' |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
131 |
+ cur_tag = self.int_br.db_get_val("Port", port.port_name, "tag", |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
132 |
+ log_errors=log_errors) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
133 |
+ if cur_tag: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
134 |
+ self.int_br.clear_db_attribute("Port", port.port_name, "tag") |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
135 |
+ if port.ofport != -1: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
136 |
+ self.int_br.drop_port(in_port=port.ofport) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
137 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
138 |
+ def setup_integration_br(self): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
139 |
+ '''Setup the integration bridge and remove all existing flows.''' |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
140 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
141 |
+ # Ensure the integration bridge is created. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
142 |
+ # ovs_lib.OVSBridge.create() will run |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
143 |
+ # ovs-vsctl -- --may-exist add-br BRIDGE_NAME |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
144 |
+ # which does nothing if bridge already exists. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
145 |
+ self.int_br.create() |
7238
96025c3f5cac
24939508 CDom conn. lost on LDom requiring neutron and vswitch-server restart
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6848
diff
changeset
|
146 |
+ if self.enable_tunneling: |
96025c3f5cac
24939508 CDom conn. lost on LDom requiring neutron and vswitch-server restart
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6848
diff
changeset
|
147 |
+ self.int_br.set_secure_mode() |
96025c3f5cac
24939508 CDom conn. lost on LDom requiring neutron and vswitch-server restart
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6848
diff
changeset
|
148 |
+ else: |
96025c3f5cac
24939508 CDom conn. lost on LDom requiring neutron and vswitch-server restart
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6848
diff
changeset
|
149 |
+ self.int_br.set_standalone_mode() |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
150 |
+ self.int_br.setup_controllers(self.conf) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
151 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
152 |
+ if self.conf.AGENT.drop_flows_on_start: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
153 |
+ self.int_br.delete_flows() |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
154 |
+ # Switch all traffic using normal-mode OVS only if tunneling |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
155 |
+ # is disabled. Otherwise, we will need to add various OpenFlow tables |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
156 |
+ # and flows to switch traffic. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
157 |
+ if not self.enable_tunneling: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
158 |
+ self.int_br.install_normal() |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
159 |
+ # Add a canary flow to int_br to track OVS restarts |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
160 |
+ self.int_br.setup_canary_table() |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
161 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
162 |
+ def setup_physical_bridges(self, bridge_mappings): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
163 |
+ '''Makes sure that the uplink port for a given physical network |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
164 |
+ exists in the integration bridge. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
165 |
+ ''' |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
166 |
+ self.phys_brs = {} |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
167 |
+ # We do not use either int_ofports or phys_ofports below, however |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
168 |
+ # we need to initialize them to empty values since it is used in |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
169 |
+ # the common code which is mostly no-op for us. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
170 |
+ self.int_ofports = {} |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
171 |
+ self.phys_ofports = {} |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
172 |
+ ovs = ovs_lib.BaseOVS() |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
173 |
+ for physical_network, uplink_port in bridge_mappings.iteritems(): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
174 |
+ LOG.info(_LI("Mapping physical network %(physical_network)s to " |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
175 |
+ "uplink port %(uplink_port)s"), |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
176 |
+ {'physical_network': physical_network, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
177 |
+ 'uplink_port': uplink_port}) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
178 |
+ if not ovs.port_exists(uplink_port): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
179 |
+ LOG.error(_LE("Uplink port %(uplink_port)s for physical " |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
180 |
+ "network %(physical_network)s does not exist. " |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
181 |
+ "Agent terminated!"), |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
182 |
+ {'physical_network': physical_network, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
183 |
+ 'uplink_port': uplink_port}) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
184 |
+ sys.exit(1) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
185 |
+ self.phys_brs[physical_network] = uplink_port |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
186 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
187 |
+ def setup_ancillary_bridges(self, integ_br, tun_br): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
188 |
+ '''Setup ancillary bridges - for example br-ex.''' |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
189 |
+ ovs = ovs_lib.BaseOVS() |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
190 |
+ ovs_bridges = set(ovs.get_bridges()) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
191 |
+ # Remove all known bridges |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
192 |
+ ovs_bridges.remove(integ_br) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
193 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
194 |
+ # Filter list of bridges to those that have external |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
195 |
+ # bridge-id's configured |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
196 |
+ br_names = [] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
197 |
+ for bridge in ovs_bridges: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
198 |
+ bridge_id = ovs.get_bridge_external_bridge_id(bridge) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
199 |
+ if bridge_id != bridge: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
200 |
+ br_names.append(bridge) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
201 |
+ ovs_bridges.difference_update(br_names) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
202 |
+ ancillary_bridges = [] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
203 |
+ for bridge in ovs_bridges: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
204 |
+ br = ovs_lib.OVSBridge(bridge) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
205 |
+ LOG.info(_LI('Adding %s to list of bridges.'), bridge) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
206 |
+ ancillary_bridges.append(br) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
207 |
+ return ancillary_bridges |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
208 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
209 |
+ def setup_tunnel_br(self, tun_br_name=None): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
210 |
+ '''(re)initialize the tunnel bridge. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
211 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
212 |
+ :param tun_br_name: the name of the tunnel bridge. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
213 |
+ ''' |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
214 |
+ # Solaris doesn't have a separate tunnel bridge, instead we |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
215 |
+ # re-use the integration bridge itself. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
216 |
+ if self.tun_br is None: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
217 |
+ self.tun_br = self.int_br |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
218 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
219 |
+ # create ovs.vxlan1 datalink and add it to integration bridge |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
220 |
+ if not self.local_ip: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
221 |
+ LOG.error(_LE("local_ip parameter is not set. Cannot have " |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
222 |
+ "tunneling enabled without it. Agent terminated!")) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
223 |
+ exit(1) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
224 |
+ if not net_lib.Datalink.datalink_exists("ovs.vxlan1"): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
225 |
+ # create the required vxlan |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
226 |
+ cmd = ['/usr/sbin/dladm', 'create-vxlan', '-t', '-p', |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
227 |
+ 'addr=%s,vni=flow' % (self.local_ip), 'ovs.vxlan1'] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
228 |
+ try: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
229 |
+ utils.execute(cmd) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
230 |
+ except Exception as e: |
7314
014a673c1f62
25029929 non-VM ports don't reflect the MTU of the neutron network
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents:
7238
diff
changeset
|
231 |
+ LOG.exception(_LE("failed to create VXLAN tunnel end point " |
014a673c1f62
25029929 non-VM ports don't reflect the MTU of the neutron network
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents:
7238
diff
changeset
|
232 |
+ "ovs.vxlan1: %s. Agent terminated!") % (e)) |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
233 |
+ exit(1) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
234 |
+ # set openvswitch property to on |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
235 |
+ try: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
236 |
+ cmd = ['/usr/sbin/dladm', 'show-linkprop', '-p', |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
237 |
+ 'openvswitch', '-co', 'value', 'ovs.vxlan1'] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
238 |
+ stdout = utils.execute(cmd) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
239 |
+ if stdout.strip() == 'off': |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
240 |
+ cmd = ['/usr/sbin/dladm', 'set-linkprop', '-t', '-p', |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
241 |
+ 'openvswitch=on', 'ovs.vxlan1'] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
242 |
+ utils.execute(cmd) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
243 |
+ except Exception as e: |
7314
014a673c1f62
25029929 non-VM ports don't reflect the MTU of the neutron network
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents:
7238
diff
changeset
|
244 |
+ LOG.exception(_LE("failed to set 'openvswitch' property on " |
014a673c1f62
25029929 non-VM ports don't reflect the MTU of the neutron network
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents:
7238
diff
changeset
|
245 |
+ "ovs.vxlan1: %s. Agent terminated!") % (e)) |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
246 |
+ exit(1) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
247 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
248 |
+ attrs = [('type', 'vxlan'), |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
249 |
+ ('options', {'remote_ip': 'flow'}), |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
250 |
+ ('options', {'key': 'flow'})] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
251 |
+ self.tun_br.replace_port('ovs.vxlan1', *attrs) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
252 |
+ self.tun_ofport = self.tun_br.get_port_ofport('ovs.vxlan1') |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
253 |
+ if self.tun_ofport == constants.OFPORT_INVALID: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
254 |
+ LOG.error(_LE("Failed to add ovs.vxlan1 to integration bridge. " |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
255 |
+ "Cannot have tunneling enabled on this agent. " |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
256 |
+ "Agent terminated!")) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
257 |
+ exit(1) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
258 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
259 |
+ def setup_tunnel_br_flows(self): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
260 |
+ '''Setup the tunnel bridge |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
261 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
262 |
+ Add all flows to the tunnel bridge. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
263 |
+ ''' |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
264 |
+ self.tun_br.setup_default_tunnel_table(self.tun_ofport, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
265 |
+ self.arp_responder_enabled) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
266 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
267 |
+ def _mod_flood_to_tun_flows(self, ofport, remote_ips, segmentation_id, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
268 |
+ local_ofports): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
269 |
+ LOG.debug(_("Modifying flooding for %s to all %s for VNI %s on %s") % |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
270 |
+ (ofport, remote_ips, segmentation_id, local_ofports)) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
271 |
+ if not local_ofports and not remote_ips: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
272 |
+ return |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
273 |
+ action_prefix = "" |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
274 |
+ if local_ofports: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
275 |
+ action_prefix = ("output:%s" % |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
276 |
+ self.tun_br._ofport_set_to_str(local_ofports)) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
277 |
+ if not remote_ips: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
278 |
+ assert local_ofports |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
279 |
+ self.tun_br.mod_flow(table=constants.FLOOD_TO_TUN, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
280 |
+ in_port="%s" % ofport, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
281 |
+ actions="%s" % action_prefix) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
282 |
+ return |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
283 |
+ action_str = "" |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
284 |
+ if action_prefix: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
285 |
+ action_str = "%s," % action_prefix |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
286 |
+ action_str += "set_tunnel:%s" % segmentation_id |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
287 |
+ # for each of the remote_ip |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
288 |
+ for remote_ip in remote_ips: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
289 |
+ action_str += ",set_field:%s->tun_dst,output:%s" % \ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
290 |
+ (remote_ip, self.tun_ofport) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
291 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
292 |
+ self.tun_br.mod_flow(table=constants.FLOOD_TO_TUN, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
293 |
+ in_port="%s" % ofport, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
294 |
+ actions="%s" % action_str) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
295 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
296 |
+ def port_bound(self, port, net_uuid, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
297 |
+ network_type, physical_network, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
298 |
+ segmentation_id, fixed_ips, device_owner, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
299 |
+ ovs_restarted): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
300 |
+ '''Bind port to net_uuid/lsw_id and install flow for inbound traffic |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
301 |
+ to vm. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
302 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
303 |
+ :param port: a ovslib.VifPort object. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
304 |
+ :param net_uuid: the net_uuid this port is to be associated with. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
305 |
+ :param network_type: the network type ('gre', 'vlan', 'flat', 'local') |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
306 |
+ :param physical_network: the physical network for 'vlan' or 'flat' |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
307 |
+ :param segmentation_id: the VID for 'vlan' or tunnel ID for 'tunnel' |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
308 |
+ :param fixed_ips: the ip addresses assigned to this port |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
309 |
+ :param device_owner: the string indicative of owner of this port |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
310 |
+ :param ovs_restarted: indicates if this is called for an OVS restart. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
311 |
+ ''' |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
312 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
313 |
+ LOG.info(_LI("Setting up datapath for port: %s connected to " |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
314 |
+ "network: %s of type: %s") % (port.vif_id, net_uuid, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
315 |
+ network_type)) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
316 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
317 |
+ if network_type in constants.TUNNEL_NETWORK_TYPES: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
318 |
+ if self.enable_tunneling: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
319 |
+ # delete any drop flows |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
320 |
+ self.int_br.delete_flows(in_port=port.ofport) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
321 |
+ remote_ips = self.tun_br_ofports[network_type].values() |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
322 |
+ # add a flow to flood Broadcast/Unknown Unicast/Multicast |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
323 |
+ # packets from this port to all the remote_ips and local |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
324 |
+ # ports on port's segmentation_id. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
325 |
+ self._mod_flood_to_tun_flows(port.ofport, remote_ips, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
326 |
+ segmentation_id, self.br_segid_ports.get(segmentation_id)) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
327 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
328 |
+ # add segmentation id for all the packets from this port and |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
329 |
+ # send it to table 2 for learning. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
330 |
+ self.tun_br.add_flow(priority=1, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
331 |
+ in_port="%s" % (port.ofport), |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
332 |
+ actions="set_tunnel:%s," |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
333 |
+ "resubmit(,%s)" % |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
334 |
+ (segmentation_id, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
335 |
+ constants.LEARN_FROM_PORTS)) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
336 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
337 |
+ # update flow that steers inbound broadcast/unknown/multicast |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
338 |
+ # packets on this segmentation id to all of the ports |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
339 |
+ # (including this port) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
340 |
+ self.br_port_segid[port.ofport] = segmentation_id |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
341 |
+ if self.br_segid_ports.get(segmentation_id): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
342 |
+ self.br_segid_ports[segmentation_id].add(port.ofport) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
343 |
+ else: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
344 |
+ self.br_segid_ports[segmentation_id] = set([port.ofport]) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
345 |
+ ofports_str = self.tun_br._ofport_set_to_str( |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
346 |
+ self.br_segid_ports[segmentation_id]) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
347 |
+ self.tun_br.mod_flow(table=constants.INBOUND_BUM_TABLE, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
348 |
+ tun_id=segmentation_id, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
349 |
+ actions="output:%s" % ofports_str) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
350 |
+ # we need to modify flows for other ports that are part of |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
351 |
+ # this segmentation ID |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
352 |
+ ofports = self.br_segid_ports[segmentation_id] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
353 |
+ for ofport in ofports: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
354 |
+ if ofport == port.ofport: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
355 |
+ continue |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
356 |
+ self._mod_flood_to_tun_flows(ofport, remote_ips, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
357 |
+ segmentation_id, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
358 |
+ ofports - set([ofport])) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
359 |
+ self.vif_ports[port.vif_id] = port |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
360 |
+ else: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
361 |
+ LOG.error(_LE("Cannot provision %(network_type)s network for " |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
362 |
+ "net-id=%(net_uuid)s - tunneling disabled"), |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
363 |
+ {'network_type': network_type, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
364 |
+ 'net_uuid': net_uuid}) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
365 |
+ return False |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
366 |
+ elif network_type == p_const.TYPE_FLAT: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
367 |
+ if physical_network not in self.phys_brs: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
368 |
+ LOG.error(_LE("Cannot provision flat network for " |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
369 |
+ "net-id=%(net_uuid)s - no uplink port for " |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
370 |
+ "physical_network %(physical_network)s"), |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
371 |
+ {'net_uuid': net_uuid, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
372 |
+ 'physical_network': physical_network}) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
373 |
+ return False |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
374 |
+ self.vif_ports[port.vif_id] = port |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
375 |
+ # delete any drop flows |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
376 |
+ self.int_br.delete_flows(in_port=port.ofport) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
377 |
+ elif network_type == p_const.TYPE_VLAN: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
378 |
+ if physical_network in self.phys_brs: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
379 |
+ # Do not bind a port if it's already bound |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
380 |
+ cur_tag = self.int_br.db_get_val("Port", port.port_name, "tag") |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
381 |
+ if cur_tag != segmentation_id: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
382 |
+ self.int_br.set_db_attribute("Port", port.port_name, "tag", |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
383 |
+ segmentation_id) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
384 |
+ if port.ofport != -1: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
385 |
+ self.int_br.delete_flows(in_port=port.ofport) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
386 |
+ self.vif_ports[port.vif_id] = port |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
387 |
+ else: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
388 |
+ LOG.error(_LE("Cannot provision VLAN network for " |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
389 |
+ "net-id=%(net_uuid)s - no uplink-port for " |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
390 |
+ "physical_network %(physical_network)s"), |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
391 |
+ {'net_uuid': net_uuid, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
392 |
+ 'physical_network': physical_network}) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
393 |
+ return False |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
394 |
+ else: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
395 |
+ LOG.error(_LE("Cannot provision unknown network type " |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
396 |
+ "%(network_type)s for net-id=%(net_uuid)s"), |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
397 |
+ {'network_type': network_type, 'net_uuid': net_uuid}) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
398 |
+ return False |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
399 |
+ return True |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
400 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
401 |
+ def _add_port_tag_info(self, need_binding_ports): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
402 |
+ pass |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
403 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
404 |
+ def _bind_devices(self, need_binding_ports): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
405 |
+ devices_up = [] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
406 |
+ devices_down = [] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
407 |
+ failed_devices = [] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
408 |
+ for port_detail in need_binding_ports: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
409 |
+ device = port_detail['device'] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
410 |
+ # update plugin about port status |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
411 |
+ # FIXME(salv-orlando): Failures while updating device status |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
412 |
+ # must be handled appropriately. Otherwise this might prevent |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
413 |
+ # neutron server from sending network-vif-* events to the nova |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
414 |
+ # API server, thus possibly preventing instance spawn. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
415 |
+ if port_detail.get('admin_state_up'): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
416 |
+ LOG.debug("Setting status for %s to UP", device) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
417 |
+ devices_up.append(device) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
418 |
+ else: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
419 |
+ LOG.debug("Setting status for %s to DOWN", device) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
420 |
+ devices_down.append(device) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
421 |
+ if devices_up or devices_down: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
422 |
+ devices_set = self.plugin_rpc.update_device_list( |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
423 |
+ self.context, devices_up, devices_down, self.agent_id, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
424 |
+ self.conf.host) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
425 |
+ failed_devices = (devices_set.get('failed_devices_up') + |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
426 |
+ devices_set.get('failed_devices_down')) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
427 |
+ if failed_devices: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
428 |
+ LOG.error(_LE("Configuration for devices %s failed!"), |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
429 |
+ failed_devices) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
430 |
+ LOG.info(_LI("Configuration for devices up %(up)s and devices " |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
431 |
+ "down %(down)s completed."), |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
432 |
+ {'up': devices_up, 'down': devices_down}) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
433 |
+ return set(failed_devices) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
434 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
435 |
+ def port_unbound(self, vif_id, net_uuid=None): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
436 |
+ '''Unbind port. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
437 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
438 |
+ Removes all the OpenFlow rules associated with the port going away. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
439 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
440 |
+ :param vif_id: the id of the vif |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
441 |
+ :param net_uuid: the net_uuid this port is associated with. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
442 |
+ ''' |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
443 |
+ LOG.info(_LI("Removing flows for port: %s" % (vif_id))) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
444 |
+ port = self.vif_ports.pop(vif_id, None) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
445 |
+ if port is None: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
446 |
+ return |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
447 |
+ if self.enable_tunneling: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
448 |
+ # remove all the OpenFlows that we have added for this port |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
449 |
+ # across all the tables. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
450 |
+ self.tun_br.delete_flows(in_port=port.ofport) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
451 |
+ self.tun_br.delete_flows(table=constants.FLOOD_TO_TUN, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
452 |
+ in_port=port.ofport) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
453 |
+ segid = self.br_port_segid.pop(port.ofport, None) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
454 |
+ if segid is None: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
455 |
+ return |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
456 |
+ self.tun_br.delete_flows(table=constants.INBOUND_UCAST_TABLE, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
457 |
+ tun_id=segid, dl_dst=port.vif_mac) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
458 |
+ self.tun_br.delete_flows(table=constants.UCAST_TO_TUN, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
459 |
+ tun_id=segid, dl_dst=port.vif_mac) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
460 |
+ if self.br_segid_ports.get(segid) is None: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
461 |
+ return |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
462 |
+ self.br_segid_ports[segid].discard(port.ofport) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
463 |
+ ofports = self.br_segid_ports[segid] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
464 |
+ if ofports: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
465 |
+ # update brodcast/multicast table to not to include this port |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
466 |
+ ofportstr = self.tun_br._ofport_set_to_str(ofports) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
467 |
+ self.tun_br.mod_flow(table=constants.INBOUND_BUM_TABLE, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
468 |
+ tun_id=segid, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
469 |
+ actions="output:%s" % ofportstr) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
470 |
+ for ofport in ofports: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
471 |
+ remote_ips = \ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
472 |
+ self.tun_br_ofports[p_const.TYPE_VXLAN].values() |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
473 |
+ self._mod_flood_to_tun_flows(ofport, remote_ips, segid, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
474 |
+ ofports - set([ofport])) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
475 |
+ else: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
476 |
+ # if this was the last port for that segmentation ID, then |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
477 |
+ # remove all associated flows from broadcast/multicast table |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
478 |
+ self.tun_br.delete_flows(table=constants.INBOUND_BUM_TABLE, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
479 |
+ tun_id=segid) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
480 |
+ else: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
481 |
+ self.int_br.delete_flows(in_port=port.ofport) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
482 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
483 |
+ def update_stale_ofport_rules(self): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
484 |
+ # Not required for Solaris since we don't support ARP spoofing |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
485 |
+ # protection yet |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
486 |
+ pass |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
487 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
488 |
+ def _rewire_zones_anet(self): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
489 |
+ port_names = self.int_br.get_port_name_list() |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
490 |
+ for port_name in port_names: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
491 |
+ if '/' not in port_name: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
492 |
+ continue |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
493 |
+ cmd = ['/usr/sbin/dladm', 'show-linkprop', '-p', 'ofport', |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
494 |
+ '-co', 'value', port_name] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
495 |
+ try: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
496 |
+ stdout = utils.execute(cmd, log_fail_as_error=False) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
497 |
+ except: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
498 |
+ continue |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
499 |
+ if stdout.strip() != '0': |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
500 |
+ continue |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
501 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
502 |
+ LOG.debug(_LE("Zone's anet '%s' was rebooted from within the zone," |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
503 |
+ " so we need to delete and add the corresponding" |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
504 |
+ " OVS port") % (port_name)) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
505 |
+ # needs re-wiring. So delete and add the port |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
506 |
+ external_ids = self.int_br.db_get_val('Interface', port_name, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
507 |
+ 'external_ids') |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
508 |
+ self.int_br.delete_port(port_name) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
509 |
+ self.int_br.add_port(port_name, ('external_ids', external_ids)) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
510 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
511 |
+ def _agent_has_updates(self, polling_manager): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
512 |
+ # check if any anet ports on OVS bridge requires re-wiring. This is |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
513 |
+ # needed if an user reboots the zone from inside the zone. This |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
514 |
+ # workaround is needed until OVS is integrated with Zones and is only |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
515 |
+ # needed on nova compute |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
516 |
+ cmd = ['/usr/bin/pgrep', 'nova-compute'] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
517 |
+ try: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
518 |
+ stdout = utils.execute(cmd, log_fail_as_error=False) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
519 |
+ except: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
520 |
+ stdout = "" |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
521 |
+ if stdout: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
522 |
+ self._rewire_zones_anet() |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
523 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
524 |
+ return super(SolarisOVSNeutronAgent, self)._agent_has_updates( |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
525 |
+ polling_manager) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
526 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
527 |
+ def cleanup_stale_flows(self): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
528 |
+ LOG.info(_LI("Cleaning stale %s flows"), self.int_br.br_name) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
529 |
+ self.int_br.cleanup_flows() |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
530 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
531 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
532 |
def validate_local_ip(local_ip): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
533 |
"""Verify if the ip exists on the agent's host.""" |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
534 |
- if not ip_lib.IPWrapper().get_device_by_ip(local_ip): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
535 |
+ if platform.system() == "SunOS": |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
536 |
+ local_ip_valid = net_lib.IPInterface.ipaddr_exists(local_ip) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
537 |
+ else: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
538 |
+ local_ip_valid = ip_lib.IPWrapper().get_device_by_ip(local_ip) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
539 |
+ |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
540 |
+ if not local_ip_valid: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
541 |
LOG.error(_LE("Tunneling can't be enabled with invalid local_ip '%s'." |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
542 |
" IP couldn't be found on this host's interfaces."), |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
543 |
local_ip) |
7238
96025c3f5cac
24939508 CDom conn. lost on LDom requiring neutron and vswitch-server restart
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
6848
diff
changeset
|
544 |
@@ -2116,7 +2608,10 @@ |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
545 |
validate_tunnel_config(cfg.CONF.AGENT.tunnel_types, cfg.CONF.OVS.local_ip) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
546 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
547 |
try: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
548 |
- agent = OVSNeutronAgent(bridge_classes, cfg.CONF) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
549 |
+ if platform.system() == "SunOS": |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
550 |
+ agent = SolarisOVSNeutronAgent(bridge_classes, cfg.CONF) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
551 |
+ else: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
552 |
+ agent = OVSNeutronAgent(bridge_classes, cfg.CONF) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
553 |
except (RuntimeError, ValueError) as e: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
554 |
LOG.error(_LE("%s Agent terminated!"), e) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff
changeset
|
555 |
sys.exit(1) |