コード例 #1
0
    def _add_non_ip_conj_flows(self, port):
        """Install conjunction flows that don't depend on IP address of remote
        groups, which consist of actions=conjunction(conj_id, 2/2) flows and
        actions=accept flows.

        The remaining part is done by ConjIPFlowManager.
        """
        for sec_group_id, rule in (
                self._create_remote_rules_generator_for_port(port)):
            direction = rule['direction']
            ethertype = rule['ethertype']

            conj_id = self.conj_ip_manager.add(port.vlan_tag, sec_group_id,
                                               rule['remote_group_id'],
                                               direction, ethertype)

            flows = rules.create_flows_from_rule_and_port(rule, port)
            for flow in rules.substitute_conjunction_actions(
                    flows, 2, [conj_id]):
                self._add_flow(**flow)

            # Install actions=accept flows.
            for flow in rules.create_conj_flows(
                    port, conj_id, direction, ethertype):
                self._add_flow(**flow)
コード例 #2
0
ファイル: firewall.py プロジェクト: AradhanaSingh/neutron
    def _add_non_ip_conj_flows(self, port):
        """Install conjunction flows that don't depend on IP address of remote
        groups, which consist of actions=conjunction(conj_id, 2/2) flows and
        actions=accept flows.

        The remaining part is done by ConjIPFlowManager.
        """
        for sec_group_id, rule in (
                self._create_remote_rules_generator_for_port(port)):
            direction = rule['direction']
            ethertype = rule['ethertype']

            conj_id = self.conj_ip_manager.add(port.vlan_tag, sec_group_id,
                                               rule['remote_group_id'],
                                               direction, ethertype)

            flows = rules.create_flows_from_rule_and_port(rule, port)
            for flow in rules.substitute_conjunction_actions(
                    flows, 2, [conj_id]):
                self._add_flow(**flow)

            # Install actions=accept flows.
            for flow in rules.create_conj_flows(
                    port, conj_id, direction, ethertype):
                self._add_flow(**flow)
コード例 #3
0
ファイル: test_rules.py プロジェクト: rcbops/neutron
    def test_create_conj_flows(self):
        ovs_port = mock.Mock(ofport=1, vif_mac='00:00:00:00:00:00')
        port_dict = {'device': 'port_id'}
        port = ovsfw.OFPort(port_dict, ovs_port, vlan_tag=TESTING_VLAN_TAG)

        conj_id = 1234
        expected_template = {
            'table': ovs_consts.RULES_INGRESS_TABLE,
            'dl_type': n_const.ETHERTYPE_IPV6,
            'priority': 70,
            'conj_id': conj_id,
            'reg_port': port.ofport
        }

        flows = rules.create_conj_flows(port, conj_id,
                                        firewall.INGRESS_DIRECTION,
                                        constants.IPv6)

        self.assertEqual(ovsfw_consts.OF_STATE_ESTABLISHED_NOT_REPLY,
                         flows[0]['ct_state'])
        self.assertEqual(ovsfw_consts.OF_STATE_NEW_NOT_ESTABLISHED,
                         flows[1]['ct_state'])
        self.assertEqual("output:{:d}".format(port.ofport),
                         flows[0]['actions'])
        self.assertEqual(
            "ct(commit,zone=NXM_NX_REG{:d}[0..15]),{:s}".format(
                ovsfw_consts.REG_NET, flows[0]['actions']),
            flows[1]['actions'])

        for f in flows:
            del f['actions']
            del f['ct_state']
            self.assertEqual(expected_template, f)
            expected_template['conj_id'] += 1
コード例 #4
0
ファイル: test_rules.py プロジェクト: eayunstack/neutron
    def test_create_conj_flows(self):
        ovs_port = mock.Mock(ofport=1, vif_mac='00:00:00:00:00:00')
        port_dict = {'device': 'port_id'}
        port = ovsfw.OFPort(
            port_dict, ovs_port, vlan_tag=TESTING_VLAN_TAG)

        conj_id = 1234
        expected_template = {
            'table': ovs_consts.RULES_INGRESS_TABLE,
            'dl_type': n_const.ETHERTYPE_IPV6,
            'priority': 71,
            'conj_id': conj_id,
            'reg_port': port.ofport
        }

        flows = rules.create_conj_flows(port, conj_id,
                                        firewall.INGRESS_DIRECTION,
                                        constants.IPv6)

        self.assertEqual(ovsfw_consts.OF_STATE_ESTABLISHED_NOT_REPLY,
                         flows[0]['ct_state'])
        self.assertEqual(ovsfw_consts.OF_STATE_NEW_NOT_ESTABLISHED,
                         flows[1]['ct_state'])
        self.assertEqual("output:{:d}".format(port.ofport),
                         flows[0]['actions'])
        self.assertEqual("ct(commit,zone=NXM_NX_REG{:d}[0..15]),{:s}".format(
            ovsfw_consts.REG_NET, flows[0]['actions']),
                         flows[1]['actions'])

        for f in flows:
            del f['actions']
            del f['ct_state']
            self.assertEqual(expected_template, f)
            expected_template['conj_id'] += 1
コード例 #5
0
    def _add_non_ip_conj_flows(self, port):
        """Install conjunction flows that don't depend on IP address of remote
        groups, which consist of actions=conjunction(conj_id, 2/2) flows and
        actions=accept flows.

        The remaining part is done by ConjIPFlowManager.
        """
        port_rules = collections.defaultdict(list)
        for sec_group_id, rule in (
                self._create_remote_rules_generator_for_port(port)):
            direction = rule['direction']
            ethertype = rule['ethertype']
            protocol = rule.get('protocol')
            priority_offset = rules.flow_priority_offset(rule)

            conj_id = self.conj_ip_manager.add(port.vlan_tag, sec_group_id,
                                               rule['remote_group_id'],
                                               direction, ethertype,
                                               priority_offset)

            rule1 = rule.copy()
            del rule1['remote_group_id']
            port_rules_key = (direction, ethertype, protocol)
            port_rules[port_rules_key].append((rule1, conj_id))

        for (direction, ethertype,
             protocol), rule_conj_list in (port_rules.items()):
            all_conj_ids = set()
            for rule, conj_id in rule_conj_list:
                all_conj_ids.add(conj_id)

            if protocol in [
                    lib_const.PROTO_NUM_SCTP, lib_const.PROTO_NUM_TCP,
                    lib_const.PROTO_NUM_UDP
            ]:
                rule_conj_list = rules.merge_port_ranges(rule_conj_list)
            else:
                rule_conj_list = rules.merge_common_rules(rule_conj_list)

            for rule, conj_ids in rule_conj_list:
                flows = rules.create_flows_from_rule_and_port(rule,
                                                              port,
                                                              conjunction=True)
                for flow in rules.substitute_conjunction_actions(
                        flows, 2, conj_ids):
                    self._add_flow(**flow)

            # Install accept flows and store conj_id to reg7 for future process
            for conj_id in all_conj_ids:
                for flow in rules.create_conj_flows(port, conj_id, direction,
                                                    ethertype):
                    flow['actions'] = "set_field:{:d}->reg{:d},{:s}".format(
                        flow['conj_id'], ovsfw_consts.REG_REMOTE_GROUP,
                        flow['actions'])
                    self._add_flow(**flow)
コード例 #6
0
ファイル: firewall.py プロジェクト: igordcard/neutron
    def _add_non_ip_conj_flows(self, port):
        """Install conjunction flows that don't depend on IP address of remote
        groups, which consist of actions=conjunction(conj_id, 2/2) flows and
        actions=accept flows.

        The remaining part is done by ConjIPFlowManager.
        """
        port_rules = collections.defaultdict(list)
        for sec_group_id, rule in (
                self._create_remote_rules_generator_for_port(port)):
            direction = rule['direction']
            ethertype = rule['ethertype']
            protocol = rule.get('protocol')
            priority_offset = rules.flow_priority_offset(rule)

            conj_id = self.conj_ip_manager.add(port.vlan_tag, sec_group_id,
                                               rule['remote_group_id'],
                                               direction, ethertype,
                                               priority_offset)

            rule1 = rule.copy()
            del rule1['remote_group_id']
            port_rules_key = (direction, ethertype, protocol)
            port_rules[port_rules_key].append((rule1, conj_id))

        for (direction, ethertype, protocol), rule_conj_list in (
                port_rules.items()):
            all_conj_ids = set()
            for rule, conj_id in rule_conj_list:
                all_conj_ids.add(conj_id)

            if protocol in [lib_const.PROTO_NUM_SCTP,
                            lib_const.PROTO_NUM_TCP,
                            lib_const.PROTO_NUM_UDP]:
                rule_conj_list = rules.merge_port_ranges(rule_conj_list)
            else:
                rule_conj_list = rules.merge_common_rules(rule_conj_list)

            for rule, conj_ids in rule_conj_list:
                flows = rules.create_flows_from_rule_and_port(
                    rule, port, conjunction=True)
                for flow in rules.substitute_conjunction_actions(
                        flows, 2, conj_ids):
                    self._add_flow(**flow)

            # Install accept flows and store conj_id to reg7 for future process
            for conj_id in all_conj_ids:
                for flow in rules.create_conj_flows(
                        port, conj_id, direction, ethertype):
                    flow['actions'] = "set_field:{:d}->reg{:d},{:s}".format(
                        flow['conj_id'],
                        ovsfw_consts.REG_REMOTE_GROUP,
                        flow['actions']
                    )
                    self._add_flow(**flow)