Esempio n. 1
0
 def do_delete_all_flows(self, line):
     """
     Remove all flows and flow groups from given logical device
     """
     logical_device_id = line or self.default_logical_device_id
     stub = self.get_stub()
     stub.UpdateLogicalDeviceFlowTable(
         FlowTableUpdate(id=logical_device_id,
                         flow_mod=ofp.ofp_flow_mod(command=ofp.OFPFC_DELETE,
                                                   table_id=ofp.OFPTT_ALL,
                                                   cookie_mask=0,
                                                   out_port=ofp.OFPP_ANY,
                                                   out_group=ofp.OFPG_ANY)))
     stub.UpdateLogicalDeviceFlowGroupTable(
         FlowGroupTableUpdate(id=logical_device_id,
                              group_mod=ofp.ofp_group_mod(
                                  command=ofp.OFPGC_DELETE,
                                  group_id=ofp.OFPG_ALL)))
     self.poutput('success')
Esempio n. 2
0
    def do_install_all_sample_flows(self, line):
        """
        Install all flows that are representative of the virtualized access
        scenario in a PON network.
        """
        logical_device_id = line or self.default_logical_device_id

        # gather NNI and UNI port IDs
        nni_port_no, unis = self.get_logical_ports(logical_device_id)

        # construct and push flow rules
        stub = self.get_stub()

        for uni_port_no, c_vid in unis:
            # Controller-bound flows
            stub.UpdateLogicalDeviceFlowTable(
                FlowTableUpdate(
                    id=logical_device_id,
                    flow_mod=mk_simple_flow_mod(
                        priority=2000,
                        match_fields=[in_port(uni_port_no),
                                      eth_type(0x888e)],
                        actions=[
                            # push_vlan(0x8100),
                            # set_field(vlan_vid(4096 + 4000)),
                            output(ofp.OFPP_CONTROLLER)
                        ])))
            stub.UpdateLogicalDeviceFlowTable(
                FlowTableUpdate(
                    id=logical_device_id,
                    flow_mod=mk_simple_flow_mod(
                        priority=1000,
                        match_fields=[eth_type(0x800),
                                      ip_proto(2)],
                        actions=[output(ofp.OFPP_CONTROLLER)])))
            stub.UpdateLogicalDeviceFlowTable(
                FlowTableUpdate(id=logical_device_id,
                                flow_mod=mk_simple_flow_mod(
                                    priority=1000,
                                    match_fields=[
                                        eth_type(0x800),
                                        ip_proto(17),
                                        udp_dst(67)
                                    ],
                                    actions=[output(ofp.OFPP_CONTROLLER)])))

            # Unicast flows:
            # Downstream flow 1
            stub.UpdateLogicalDeviceFlowTable(
                FlowTableUpdate(
                    id=logical_device_id,
                    flow_mod=mk_simple_flow_mod(
                        priority=500,
                        match_fields=[
                            in_port(nni_port_no),
                            vlan_vid(4096 + 1000),
                            metadata(c_vid)  # here to mimic an ONOS artifact
                        ],
                        actions=[pop_vlan()],
                        next_table_id=1)))
            # Downstream flow 2
            stub.UpdateLogicalDeviceFlowTable(
                FlowTableUpdate(id=logical_device_id,
                                flow_mod=mk_simple_flow_mod(
                                    priority=500,
                                    table_id=1,
                                    match_fields=[
                                        in_port(nni_port_no),
                                        vlan_vid(4096 + c_vid)
                                    ],
                                    actions=[
                                        set_field(vlan_vid(4096 + 0)),
                                        output(uni_port_no)
                                    ])))
            # Upstream flow 1 for 0-tagged case
            stub.UpdateLogicalDeviceFlowTable(
                FlowTableUpdate(
                    id=logical_device_id,
                    flow_mod=mk_simple_flow_mod(
                        priority=500,
                        match_fields=[
                            in_port(uni_port_no),
                            vlan_vid(4096 + 0)
                        ],
                        actions=[set_field(vlan_vid(4096 + c_vid))],
                        next_table_id=1)))
            # Upstream flow 1 for untagged case
            stub.UpdateLogicalDeviceFlowTable(
                FlowTableUpdate(
                    id=logical_device_id,
                    flow_mod=mk_simple_flow_mod(
                        priority=500,
                        match_fields=[in_port(uni_port_no),
                                      vlan_vid(0)],
                        actions=[
                            push_vlan(0x8100),
                            set_field(vlan_vid(4096 + c_vid))
                        ],
                        next_table_id=1)))
            # Upstream flow 2 for s-tag
            stub.UpdateLogicalDeviceFlowTable(
                FlowTableUpdate(id=logical_device_id,
                                flow_mod=mk_simple_flow_mod(
                                    priority=500,
                                    table_id=1,
                                    match_fields=[
                                        in_port(uni_port_no),
                                        vlan_vid(4096 + c_vid)
                                    ],
                                    actions=[
                                        push_vlan(0x8100),
                                        set_field(vlan_vid(4096 + 1000)),
                                        output(nni_port_no)
                                    ])))

        # Push a few multicast flows
        # 1st with one bucket for our uni 0
        stub.UpdateLogicalDeviceFlowGroupTable(
            FlowGroupTableUpdate(
                id=logical_device_id,
                group_mod=mk_multicast_group_mod(
                    group_id=1,
                    buckets=[
                        ofp.ofp_bucket(
                            actions=[pop_vlan(),
                                     output(unis[0][0])])
                    ])))
        stub.UpdateLogicalDeviceFlowTable(
            FlowTableUpdate(id=logical_device_id,
                            flow_mod=mk_simple_flow_mod(
                                priority=1000,
                                match_fields=[
                                    in_port(nni_port_no),
                                    eth_type(0x800),
                                    vlan_vid(4096 + 140),
                                    ipv4_dst(0xe4010101)
                                ],
                                actions=[group(1)])))

        # 2nd with one bucket for uni 0 and 1
        stub.UpdateLogicalDeviceFlowGroupTable(
            FlowGroupTableUpdate(
                id=logical_device_id,
                group_mod=mk_multicast_group_mod(
                    group_id=2,
                    buckets=[
                        ofp.ofp_bucket(
                            actions=[pop_vlan(),
                                     output(unis[0][0])])
                        #                    ofp.ofp_bucket(actions=[pop_vlan(), output(unis[1][0])])
                    ])))
        stub.UpdateLogicalDeviceFlowTable(
            FlowTableUpdate(id=logical_device_id,
                            flow_mod=mk_simple_flow_mod(
                                priority=1000,
                                match_fields=[
                                    in_port(nni_port_no),
                                    eth_type(0x800),
                                    vlan_vid(4096 + 140),
                                    ipv4_dst(0xe4020202)
                                ],
                                actions=[group(2)])))

        # 3rd with empty bucket
        stub.UpdateLogicalDeviceFlowGroupTable(
            FlowGroupTableUpdate(id=logical_device_id,
                                 group_mod=mk_multicast_group_mod(group_id=3,
                                                                  buckets=[])))
        stub.UpdateLogicalDeviceFlowTable(
            FlowTableUpdate(id=logical_device_id,
                            flow_mod=mk_simple_flow_mod(
                                priority=1000,
                                match_fields=[
                                    in_port(nni_port_no),
                                    eth_type(0x800),
                                    vlan_vid(4096 + 140),
                                    ipv4_dst(0xe4030303)
                                ],
                                actions=[group(3)])))

        self.poutput('success')