def treat_devices_added_or_updated(self, devices, ovs_restarted):
skipped_devices = []
need_binding_devices = []
+ security_disabled_devices = []
devices_details_list = (
self.plugin_rpc.get_devices_details_list_and_failed_devices(
self.context,
ovs_restarted)
if need_binding:
need_binding_devices.append(details)
+
+ port_security = details['port_security_enabled']
+ has_sgs = 'security_groups' in details
+ if not port_security or not has_sgs:
+ security_disabled_devices.append(device)
+
self.ext_manager.handle_port(self.context, details)
else:
LOG.warn(_LW("Device %s not defined on plugin"), device)
if (port and port.ofport != -1):
self.port_dead(port)
- return skipped_devices, need_binding_devices
+ return skipped_devices, need_binding_devices, security_disabled_devices
def treat_ancillary_devices_added(self, devices):
devices_details_list = (
devices_added_updated = (port_info.get('added', set()) |
port_info.get('updated', set()))
need_binding_devices = []
+ security_disabled_ports = []
if devices_added_updated:
start = time.time()
try:
- skipped_devices, need_binding_devices = (
+ (skipped_devices, need_binding_devices,
+ security_disabled_ports) = (
self.treat_devices_added_or_updated(
devices_added_updated, ovs_restarted))
LOG.debug("process_network_ports - iteration:%(iter_num)d - "
# TODO(salv-orlando): Optimize avoiding applying filters
# unnecessarily, (eg: when there are no IP address changes)
- self.sg_agent.setup_port_filters(port_info.get('added', set()),
+ added_ports = port_info.get('added', set())
+ if security_disabled_ports:
+ added_ports -= set(security_disabled_ports)
+ self.sg_agent.setup_port_filters(added_ports,
port_info.get('updated', set()))
self._bind_devices(need_binding_devices)
'failed_devices_up': [],
'failed_devices_down': []}),\
mock.patch.object(self.agent, func_name) as func:
- skip_devs, need_bound_devices = (
+ skip_devs, need_bound_devices, insecure_ports = (
self.agent.treat_devices_added_or_updated([{}], False))
# The function should not raise
self.assertFalse(skip_devs)
skip_devs = self.agent.treat_devices_added_or_updated([{}], False)
# The function should return False for resync and no device
# processed
- self.assertEqual((['the_skipped_one'], []), skip_devs)
+ self.assertEqual((['the_skipped_one'], [], []), skip_devs)
self.assertFalse(treat_vif_port.called)
def test_treat_devices_added_updated_put_port_down(self):
'network_type': 'baz',
'fixed_ips': [{'subnet_id': 'my-subnet-uuid',
'ip_address': '1.1.1.1'}],
- 'device_owner': 'compute:None'
+ 'device_owner': 'compute:None',
+ 'port_security_enabled': True
}
with mock.patch.object(self.agent.plugin_rpc,
return_value={'xxx': mock.MagicMock()}),\
mock.patch.object(self.agent,
'treat_vif_port') as treat_vif_port:
- skip_devs, need_bound_devices = (
+ skip_devs, need_bound_devices, insecure_ports = (
self.agent.treat_devices_added_or_updated([{}], False))
# The function should return False for resync
self.assertFalse(skip_devs)
mock.patch.object(
self.agent,
"treat_devices_added_or_updated",
- return_value=([], [])) as device_added_updated,\
+ return_value=([], [], [])) as device_added_updated,\
mock.patch.object(self.agent.int_br, "get_ports_attributes",
return_value=[]),\
mock.patch.object(self.agent,
def test_process_network_port_with_empty_port(self):
self._test_process_network_ports({})
+ def test_process_network_ports_with_insecure_ports(self):
+ port_info = {'current': set(['tap0', 'tap1']),
+ 'updated': set(['tap1']),
+ 'removed': set([]),
+ 'added': set(['eth1'])}
+ with mock.patch.object(self.agent.sg_agent,
+ "setup_port_filters") as setup_port_filters,\
+ mock.patch.object(
+ self.agent,
+ "treat_devices_added_or_updated",
+ return_value=([], [], ['eth1'])) as device_added_updated:
+ self.assertFalse(self.agent.process_network_ports(port_info,
+ False))
+ device_added_updated.assert_called_once_with(
+ set(['eth1', 'tap1']), False)
+ setup_port_filters.assert_called_once_with(
+ set(), port_info.get('updated', set()))
+
def test_report_state(self):
with mock.patch.object(self.agent.state_rpc,
"report_state") as report_st: