Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
Cloud:OpenStack:Newton
openstack-neutron-doc
0001-Divide-and-conquer-local-bridge-flows-beas...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0001-Divide-and-conquer-local-bridge-flows-beasts.patch of Package openstack-neutron-doc
diff -crB --new-file neutron-9.4.2.dev21-original/neutron/plugins/ml2/drivers/openvswitch/agent/common/constants.py neutron-9.4.2.dev21/neutron/plugins/ml2/drivers/openvswitch/agent/common/constants.py *** neutron-9.4.2.dev21-original/neutron/plugins/ml2/drivers/openvswitch/agent/common/constants.py 2017-09-23 11:10:44.000000000 -0700 --- neutron-9.4.2.dev21/neutron/plugins/ml2/drivers/openvswitch/agent/common/constants.py 2019-07-17 11:57:05.891052340 -0700 *************** *** 69,74 **** --- 69,86 ---- ) ## Tunnel bridge (tun_br) + INT_BR_ALL_TABLES = ( + LOCAL_SWITCHING, + DVR_TO_SRC_MAC, + DVR_TO_SRC_MAC_VLAN, + CANARY_TABLE, + ARP_SPOOF_TABLE, + MAC_SPOOF_TABLE, + BASE_EGRESS_TABLE, + RULES_EGRESS_TABLE, + ACCEPT_OR_INGRESS_TABLE, + BASE_INGRESS_TABLE, + RULES_INGRESS_TABLE) # Various tables for tunneling flows DVR_PROCESS = 1 *************** *** 84,89 **** --- 96,113 ---- FLOOD_TO_TUN = 22 ## Physical Bridges (phys_brs) + TUN_BR_ALL_TABLES = ( + LOCAL_SWITCHING, + DVR_PROCESS, + PATCH_LV_TO_TUN, + GRE_TUN_TO_LV, + VXLAN_TUN_TO_LV, + GENEVE_TUN_TO_LV, + DVR_NOT_LEARN, + LEARN_FROM_TUN, + UCAST_TO_TUN, + ARP_RESPONDER, + FLOOD_TO_TUN) # Various tables for DVR use of physical bridge flows DVR_PROCESS_VLAN = 1 *************** *** 90,96 **** --- 114,126 ---- LOCAL_VLAN_TRANSLATION = 2 DVR_NOT_LEARN_VLAN = 3 + ### end of OpenFlow table IDs + PHY_BR_ALL_TABLES = ( + LOCAL_SWITCHING, + DVR_PROCESS_VLAN, + LOCAL_VLAN_TRANSLATION, + DVR_NOT_LEARN_VLAN) # type for ARP reply in ARP header ARP_REPLY = '0x2' diff -crB --new-file neutron-9.4.2.dev21-original/neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/br_int.py neutron-9.4.2.dev21/neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/br_int.py *** neutron-9.4.2.dev21-original/neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/br_int.py 2017-09-23 11:10:44.000000000 -0700 --- neutron-9.4.2.dev21/neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/br_int.py 2019-07-17 11:57:05.891052340 -0700 *************** *** 39,44 **** --- 39,46 ---- class OVSIntegrationBridge(ovs_bridge.OVSAgentBridge): """openvswitch agent br-int specific logic.""" + of_tables = constants.INT_BR_ALL_TABLES + def setup_default_table(self): self.setup_canary_table() self.install_normal() diff -crB --new-file neutron-9.4.2.dev21-original/neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/br_phys.py neutron-9.4.2.dev21/neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/br_phys.py *** neutron-9.4.2.dev21-original/neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/br_phys.py 2017-09-23 11:10:44.000000000 -0700 --- neutron-9.4.2.dev21/neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/br_phys.py 2019-07-17 11:57:05.891052340 -0700 *************** *** 28,33 **** --- 28,34 ---- # Used by OVSDVRProcessMixin dvr_process_table_id = constants.DVR_PROCESS_VLAN dvr_process_next_table_id = constants.LOCAL_VLAN_TRANSLATION + of_tables = constants.PHY_BR_ALL_TABLES def setup_default_table(self): self.install_normal() diff -crB --new-file neutron-9.4.2.dev21-original/neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/br_tun.py neutron-9.4.2.dev21/neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/br_tun.py *** neutron-9.4.2.dev21-original/neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/br_tun.py 2017-09-23 11:10:44.000000000 -0700 --- neutron-9.4.2.dev21/neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/br_tun.py 2019-07-17 11:57:05.891052340 -0700 *************** *** 46,51 **** --- 46,52 ---- # Used by OVSDVRProcessMixin dvr_process_table_id = constants.DVR_PROCESS dvr_process_next_table_id = constants.PATCH_LV_TO_TUN + of_tables = constants.TUN_BR_ALL_TABLES def setup_default_table(self, patch_int_ofport, arp_responder_enabled): (dp, ofp, ofpp) = self._get_dp() diff -crB --new-file neutron-9.4.2.dev21-original/neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/ofswitch.py neutron-9.4.2.dev21/neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/ofswitch.py *** neutron-9.4.2.dev21-original/neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/ofswitch.py 2017-09-23 11:10:44.000000000 -0700 --- neutron-9.4.2.dev21/neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/ofswitch.py 2019-07-17 11:57:05.895052368 -0700 *************** *** 23,29 **** import ryu.app.ofctl.api as ofctl_api import ryu.exception as ryu_exc ! from neutron._i18n import _, _LW LOG = logging.getLogger(__name__) --- 23,29 ---- import ryu.app.ofctl.api as ofctl_api import ryu.exception as ryu_exc ! from neutron._i18n import _, _LW, _LI LOG = logging.getLogger(__name__) *************** *** 134,144 **** flows += rep.body return flows ! def cleanup_flows(self): ! cookies = set([f.cookie for f in self.dump_flows()]) - \ ! self.reserved_cookies ! LOG.debug("Reserved cookies for %s: %s", self.br_name, ! self.reserved_cookies) for c in cookies: LOG.warning(_LW("Deleting flow with cookie 0x%(cookie)x"), {'cookie': c}) --- 134,142 ---- flows += rep.body return flows ! def _dump_and_clean(self, table_id=None): ! cookies = set([f.cookie for f in self.dump_flows(table_id)]) - \ ! self.reserved_cookies for c in cookies: LOG.warning(_LW("Deleting flow with cookie 0x%(cookie)x"), {'cookie': c}) *************** *** 147,152 **** --- 145,158 ---- def install_goto_next(self, table_id): self.install_goto(table_id=table_id, dest_table_id=table_id + 1) + def cleanup_flows(self): + LOG.info(_LI("Reserved cookies for %(br_name)s: %(cookie)s"), + {'br_name': self.br_name, + 'cookie': self.reserved_cookies}) + + for table_id in self.of_tables: + self._dump_and_clean(table_id) + def install_output(self, port, table_id=0, priority=0, match=None, **match_kwargs): (_dp, ofp, ofpp) = self._get_dp() diff -crB --new-file neutron-9.4.2.dev21-original/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py neutron-9.4.2.dev21/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py *** neutron-9.4.2.dev21-original/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py 2019-07-17 11:54:54.118130494 -0700 --- neutron-9.4.2.dev21/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py 2019-07-17 11:59:29.636040672 -0700 *************** *** 1846,1858 **** return port_stats def cleanup_stale_flows(self): ! bridges = [self.int_br] ! bridges.extend(self.phys_brs.values()) if self.enable_tunneling: ! bridges.append(self.tun_br) ! for bridge in bridges: ! LOG.info(_LI("Cleaning stale %s flows"), bridge.br_name) ! bridge.cleanup_flows() def process_port_info(self, start, polling_manager, sync, ovs_restarted, ports, ancillary_ports, updated_ports_copy, --- 1846,1860 ---- return port_stats def cleanup_stale_flows(self): ! LOG.info(_LI("Cleaning stale %s flows"), self.int_br.br_name) ! self.int_br.cleanup_flows() ! for pby_br in self.phys_brs.values(): ! LOG.info(_LI("Cleaning stale %s flows"), pby_br.br_name) ! pby_br.cleanup_flows() ! if self.enable_tunneling: ! LOG.info(_LI("Cleaning stale %s flows"), self.tun_br.br_name) ! self.tun_br.cleanup_flows() def process_port_info(self, start, polling_manager, sync, ovs_restarted, ports, ancillary_ports, updated_ports_copy, diff -crB --new-file neutron-9.4.2.dev21-original/neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_neutron_agent.py neutron-9.4.2.dev21/neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_neutron_agent.py *** neutron-9.4.2.dev21-original/neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_neutron_agent.py 2019-07-17 11:54:54.122130524 -0700 --- neutron-9.4.2.dev21/neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_neutron_agent.py 2019-07-17 11:57:05.895052368 -0700 *************** *** 2123,2143 **** mock.patch.object(self.agent.int_br, 'delete_flows') as del_flow: self.agent.int_br.set_agent_uuid_stamp(1234) ! dump_flows.return_value = [ # mock ryu.ofproto.ofproto_v1_3_parser.OFPFlowStats mock.Mock(cookie=1234, table_id=0), mock.Mock(cookie=17185, table_id=2), mock.Mock(cookie=9029, table_id=2), mock.Mock(cookie=1234, table_id=3), ] self.agent.iter_num = 3 self.agent.cleanup_stale_flows() expected = [mock.call(cookie=17185, cookie_mask=uint64_max), mock.call(cookie=9029, cookie_mask=uint64_max)] del_flow.assert_has_calls(expected, any_order=True) ! self.assertEqual(len(expected), len(del_flow.mock_calls)) class AncillaryBridgesTest(object): --- 2123,2150 ---- mock.patch.object(self.agent.int_br, 'delete_flows') as del_flow: self.agent.int_br.set_agent_uuid_stamp(1234) ! fake_flows = [ # mock ryu.ofproto.ofproto_v1_3_parser.OFPFlowStats mock.Mock(cookie=1234, table_id=0), mock.Mock(cookie=17185, table_id=2), mock.Mock(cookie=9029, table_id=2), mock.Mock(cookie=1234, table_id=3), ] + dump_flows.return_value = fake_flows self.agent.iter_num = 3 self.agent.cleanup_stale_flows() + + dump_flows_expected = [ + mock.call(tid) for tid in constants.INT_BR_ALL_TABLES] + dump_flows.assert_has_calls(dump_flows_expected) + expected = [mock.call(cookie=17185, cookie_mask=uint64_max), mock.call(cookie=9029, cookie_mask=uint64_max)] del_flow.assert_has_calls(expected, any_order=True) ! self.assertEqual(len(constants.INT_BR_ALL_TABLES) * len(expected), ! len(uninstall_flows.mock_calls)) class AncillaryBridgesTest(object): diff -crB --new-file neutron-9.4.2.dev21-original/neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_tunnel.py neutron-9.4.2.dev21/neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_tunnel.py *** neutron-9.4.2.dev21-original/neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_tunnel.py 2019-07-17 11:52:30.165056054 -0700 --- neutron-9.4.2.dev21/neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_tunnel.py 2019-07-17 11:57:05.899052396 -0700 *************** *** 565,576 **** mock.call.cleanup_flows(), mock.call.check_canary_table() ] - self.mock_tun_bridge_expected += [ - mock.call.cleanup_flows() - ] self.mock_map_tun_bridge_expected += [ mock.call.cleanup_flows() ] # No cleanup is expected on ancillary bridge self.ovs_bridges[self.INT_BRIDGE].check_canary_table.return_value = \ --- 565,576 ---- mock.call.cleanup_flows(), mock.call.check_canary_table() ] self.mock_map_tun_bridge_expected += [ mock.call.cleanup_flows() ] + self.mock_tun_bridge_expected += [ + mock.call.cleanup_flows() + } # No cleanup is expected on ancillary bridge self.ovs_bridges[self.INT_BRIDGE].check_canary_table.return_value = \
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor