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')
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')