def show_flow(self, table_id, flow_id, oper, ofp): ofswitch = OFSwitch(self.ctrl, self.switchid) flow_entry = None if oper: result = ofswitch.get_operational_FlowEntry(table_id, flow_id) else: result = ofswitch.get_configured_FlowEntry(table_id, flow_id) status = result.get_status() if(status.eq(STATUS.OK) == True): flow_entry = result.get_data() assert(isinstance(flow_entry, FlowEntry)) elif(status.eq(STATUS.DATA_NOT_FOUND)): print "\n".strip() print " Requested data not found" print "\n".strip() exit(0) else: print ("\n") print ("!!!Error, reason: %s" % status.brief().lower()) exit(0) print "\n".strip() s = "Device Operational" if oper else "Controller Cached" print " Switch '%s' - %s Flows" % (self.switchid, s) print "\n".strip() if(flow_entry != None): if(ofp): print " -- Flow id '%s'" % flow_entry.get_flow_id() print " %s" % flow_entry.to_ofp_oxm_syntax() else: lines = flow_entry.to_yang_json(strip=True).split('\n') for line in lines: print " %s" % line else: print " Not found" print "\n".strip()
def of_demo_26(): f = "cfg.yml" d = {} if (load_dict_from_file(f, d) is False): print("Config file '%s' read error: " % f) exit() try: ctrlIpAddr = d['ctrlIpAddr'] ctrlPortNum = d['ctrlPortNum'] ctrlUname = d['ctrlUname'] ctrlPswd = d['ctrlPswd'] nodeName = d['nodeName'] rundelay = d['rundelay'] except: print("Failed to get Controller device attributes") exit(0) print("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<") print("<<< Demo 26 Start") print("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<") ctrl = Controller(ctrlIpAddr, ctrlPortNum, ctrlUname, ctrlPswd) ofswitch = OFSwitch(ctrl, nodeName) print("<<< 'Controller': %s, 'OpenFlow' switch: '%s'" % (ctrlIpAddr, nodeName)) flow_table_id = 0 flow_id_base = 12 flow_id = flow_id_base flowEntries = [] # Sample flow entry flow_entry = FlowEntry() flow_entry.set_flow_cookie(6001) flow_entry.set_flow_table_id(flow_table_id) flow_entry.set_flow_id(flow_id) flow_id += 1 flow_entry.set_flow_idle_timeout(12000) flow_entry.set_flow_hard_timeout(12000) flow_entry.set_flow_priority(1000) instruction = Instruction(instruction_order=0) action = DropAction(order=0) instruction.add_apply_action(action) flow_entry.add_instruction(instruction) match = Match() match.set_eth_type(ETH_TYPE_ARP) match.set_eth_src("00:11:22:33:44:55") match.set_eth_dst("aa:bb:cc:dd:ee:ff") flow_entry.add_match(match) flowEntries.append(flow_entry) # Sample flow entry flow_entry = FlowEntry() flow_entry.set_flow_cookie(7001) flow_entry.set_flow_table_id(flow_table_id) flow_entry.set_flow_id(flow_id) flow_id += 1 flow_entry.set_flow_idle_timeout(2400) flow_entry.set_flow_hard_timeout(2400) flow_entry.set_flow_priority(2000) instruction = Instruction(instruction_order=0) action = OutputAction(order=0, port="CONTROLLER", max_len=60) instruction.add_apply_action(action) flow_entry.add_instruction(instruction) match = Match() match.set_eth_type(ETH_TYPE_IPv4) match.set_ipv4_src("1.2.3.4/32") match.set_ipv4_dst("192.168.1.11/32") flow_entry.add_match(match) flowEntries.append(flow_entry) # Sample flow entry flow_entry = FlowEntry() flow_entry.set_flow_cookie(800) flow_entry.set_flow_table_id(flow_table_id) flow_entry.set_flow_id(flow_id) flow_id += 1 flow_entry.set_flow_hard_timeout(1800) flow_entry.set_flow_idle_timeout(1800) flow_entry.set_flow_priority(3000) instruction = Instruction(instruction_order=0) action = OutputAction(order=0, port=5) instruction.add_apply_action(action) action = OutputAction(order=1, port=6) instruction.add_apply_action(action) action = OutputAction(order=2, port=7) instruction.add_apply_action(action) flow_entry.add_instruction(instruction) match = Match() match.set_in_port(1) flow_entry.add_match(match) flowEntries.append(flow_entry) # Sample flow entry flow_entry = FlowEntry() flow_entry.set_flow_cookie(1234) flow_entry.set_flow_table_id(flow_table_id) flow_entry.set_flow_id(flow_id) flow_id += 1 flow_entry.set_flow_hard_timeout(0) flow_entry.set_flow_idle_timeout(0) flow_entry.set_flow_priority(4000) instruction = Instruction(instruction_order=0) action = PushVlanHeaderAction(order=0) action.set_eth_type(ETH_TYPE_QINQ) instruction.add_apply_action(action) action = SetFieldAction(order=1) action.set_vlan_id(100) instruction.add_apply_action(action) action = PushVlanHeaderAction(order=2) action.set_eth_type(ETH_TYPE_DOT1Q) instruction.add_apply_action(action) action = SetFieldAction(order=3) action.set_vlan_id(998) instruction.add_apply_action(action) action = OutputAction(order=4, port=111) instruction.add_apply_action(action) flow_entry.add_instruction(instruction) match = Match() match.set_eth_type(ETH_TYPE_ARP) match.set_vlan_id(998) match.set_in_port(in_port=110) flow_entry.add_match(match) flowEntries.append(flow_entry) # Sample flow entry flow_entry = FlowEntry() flow_entry.set_flow_cookie(1234) flow_entry.set_flow_table_id(flow_table_id) flow_entry.set_flow_id(flow_id) flow_id += 1 flow_entry.set_flow_hard_timeout(0) flow_entry.set_flow_idle_timeout(0) flow_entry.set_flow_priority(4000) instruction = Instruction(instruction_order=0) action = PushVlanHeaderAction(order=0) action.set_eth_type(ETH_TYPE_QINQ) instruction.add_apply_action(action) action = SetFieldAction(order=1) action.set_vlan_id(100) instruction.add_apply_action(action) action = PushVlanHeaderAction(order=2) action.set_eth_type(ETH_TYPE_DOT1Q) instruction.add_apply_action(action) action = SetFieldAction(order=3) action.set_vlan_id(998) instruction.add_apply_action(action) action = OutputAction(order=4, port=111) instruction.add_apply_action(action) flow_entry.add_instruction(instruction) match = Match() match.set_eth_type(ETH_TYPE_IPv4) match.set_vlan_id(998) match.set_in_port(in_port=110) flow_entry.add_match(match) flowEntries.append(flow_entry) # Sample flow entry flow_entry = FlowEntry() flow_entry.set_flow_cookie(1234) flow_entry.set_flow_table_id(flow_table_id) flow_entry.set_flow_id(flow_id) flow_id += 1 flow_entry.set_flow_hard_timeout(0) flow_entry.set_flow_idle_timeout(0) flow_entry.set_flow_priority(4000) instruction = Instruction(instruction_order=0) action = PopVlanHeaderAction(order=0) instruction.add_apply_action(action) action = OutputAction(order=1, port=110) instruction.add_apply_action(action) flow_entry.add_instruction(instruction) match = Match() match.set_eth_type(ETH_TYPE_ARP) match.set_vlan_id(100) match.set_in_port(111) flow_entry.add_match(match) flowEntries.append(flow_entry) # Sample flow entry flow_entry = FlowEntry() flow_entry.set_flow_cookie(1234) flow_entry.set_flow_table_id(flow_table_id) flow_entry.set_flow_id(flow_id) flow_id += 1 flow_entry.set_flow_hard_timeout(0) flow_entry.set_flow_idle_timeout(0) flow_entry.set_flow_priority(4000) instruction = Instruction(instruction_order=0) action = PopVlanHeaderAction(order=0) instruction.add_apply_action(action) action = OutputAction(order=1, port=110) instruction.add_apply_action(action) flow_entry.add_instruction(instruction) match = Match() match.set_eth_type(ETH_TYPE_IPv4) match.set_vlan_id(100) match.set_in_port(111) flow_entry.add_match(match) flowEntries.append(flow_entry) print("\n") print("<<< Remove configured flows from the Controller") ofswitch.delete_flows(flow_table_id) print("\n") print("<<< Set OpenFlow flows on the Controller") print("\n") print("<<< Flows to be configured:") flowEntries = sorted(flowEntries, key=lambda fe: fe.get_flow_priority()) for fe in flowEntries: print(" %s" % fe.to_ofp_oxm_syntax()) time.sleep(rundelay) success = True for fe in flowEntries: result = ofswitch.add_modify_flow(fe) status = result.get_status() if (status.eq(STATUS.OK)): pass else: success = False print("\n") print("!!!Demo terminated, failed to add flow:\n '%s'" % fe.to_ofp_oxm_syntax()) print(" Failure reason: %s" % status.detailed()) if success: print "\n" print("<<< Flows successfully added to the Controller") else: print "\n" print("<<< Removing all flows from the Controller") ofswitch.delete_flows(flow_table_id) exit(0) print("\n") print("<<< Get configured flows from the Controller") time.sleep(rundelay) print("\n") print("<<< Configured flows:") result = ofswitch.get_configured_FlowEntries(flow_table_id=0) status = result.get_status() if (status.eq(STATUS.OK)): data = result.get_data() flowEntries = sorted(data, key=lambda fe: fe.get_flow_priority()) for fe in flowEntries: print " %s" % fe.to_ofp_oxm_syntax() else: print("\n") print("!!!Demo terminated, reason: %s" % status.brief().lower()) exit(0) print("\n") print("<<< Get configured flows by IDs from the Controller:") time.sleep(rundelay) for i in range(flow_id_base, flow_id): result = ofswitch.get_configured_FlowEntry(flow_table_id, i) status = result.get_status() if (status.eq(STATUS.OK)): print(" -- Flow id '%s'" % i) fe = result.get_data() print " %s" % fe.to_ofp_oxm_syntax() else: print("\n") print("!!!Demo terminated, reason: %s" % status.brief().lower()) print("<<< Removing all flows from the Controller") ofswitch.delete_flows(flow_table_id) exit(0) time.sleep(rundelay) print("\n") print("<<< Remove configured flows from the Controller") ofswitch.delete_flows(flow_table_id) time.sleep(rundelay) print("\n") print("<<< Get configured flows from the Controller") result = ofswitch.get_configured_FlowEntries(flow_table_id=0) status = result.get_status() if (status.eq(STATUS.DATA_NOT_FOUND)): print("\n") print "<<< No configured flows" else: print("\n") print("!!!Demo terminated, reason: %s" % status.detailed()) exit(0) print("\n") print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") print(">>> Demo End") print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
def of_demo_26(): f = "cfg.yml" d = {} if(load_dict_from_file(f, d) is False): print("Config file '%s' read error: " % f) exit() try: ctrlIpAddr = d['ctrlIpAddr'] ctrlPortNum = d['ctrlPortNum'] ctrlUname = d['ctrlUname'] ctrlPswd = d['ctrlPswd'] nodeName = d['nodeName'] rundelay = d['rundelay'] except: print ("Failed to get Controller device attributes") exit(0) print ("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<") print ("<<< Demo 26 Start") print ("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<") ctrl = Controller(ctrlIpAddr, ctrlPortNum, ctrlUname, ctrlPswd) ofswitch = OFSwitch(ctrl, nodeName) print ("<<< 'Controller': %s, 'OpenFlow' switch: '%s'" % (ctrlIpAddr, nodeName)) flow_table_id = 0 flow_id_base = 12 flow_id = flow_id_base flowEntries = [] # Sample flow entry flow_entry = FlowEntry() flow_entry.set_flow_cookie(6001) flow_entry.set_flow_table_id(flow_table_id) flow_entry.set_flow_id(flow_id) flow_id += 1 flow_entry.set_flow_idle_timeout(12000) flow_entry.set_flow_hard_timeout(12000) flow_entry.set_flow_priority(1000) instruction = Instruction(instruction_order=0) action = DropAction(order=0) instruction.add_apply_action(action) flow_entry.add_instruction(instruction) match = Match() match.set_eth_type(ETH_TYPE_ARP) match.set_eth_src("00:11:22:33:44:55") match.set_eth_dst("aa:bb:cc:dd:ee:ff") flow_entry.add_match(match) flowEntries.append(flow_entry) # Sample flow entry flow_entry = FlowEntry() flow_entry.set_flow_cookie(7001) flow_entry.set_flow_table_id(flow_table_id) flow_entry.set_flow_id(flow_id) flow_id += 1 flow_entry.set_flow_idle_timeout(2400) flow_entry.set_flow_hard_timeout(2400) flow_entry.set_flow_priority(2000) instruction = Instruction(instruction_order=0) action = OutputAction(order=0, port="CONTROLLER", max_len=60) instruction.add_apply_action(action) flow_entry.add_instruction(instruction) match = Match() match.set_eth_type(ETH_TYPE_IPv4) match.set_ipv4_src("1.2.3.4/32") match.set_ipv4_dst("192.168.1.11/32") flow_entry.add_match(match) flowEntries.append(flow_entry) # Sample flow entry flow_entry = FlowEntry() flow_entry.set_flow_cookie(800) flow_entry.set_flow_table_id(flow_table_id) flow_entry.set_flow_id(flow_id) flow_id += 1 flow_entry.set_flow_hard_timeout(1800) flow_entry.set_flow_idle_timeout(1800) flow_entry.set_flow_priority(3000) instruction = Instruction(instruction_order=0) action = OutputAction(order=0, port=5) instruction.add_apply_action(action) action = OutputAction(order=1, port=6) instruction.add_apply_action(action) action = OutputAction(order=2, port=7) instruction.add_apply_action(action) flow_entry.add_instruction(instruction) match = Match() match.set_in_port(1) flow_entry.add_match(match) flowEntries.append(flow_entry) # Sample flow entry flow_entry = FlowEntry() flow_entry.set_flow_cookie(1234) flow_entry.set_flow_table_id(flow_table_id) flow_entry.set_flow_id(flow_id) flow_id += 1 flow_entry.set_flow_hard_timeout(0) flow_entry.set_flow_idle_timeout(0) flow_entry.set_flow_priority(4000) instruction = Instruction(instruction_order=0) action = PushVlanHeaderAction(order=0) action.set_eth_type(ETH_TYPE_QINQ) instruction.add_apply_action(action) action = SetFieldAction(order=1) action.set_vlan_id(100) instruction.add_apply_action(action) action = PushVlanHeaderAction(order=2) action.set_eth_type(ETH_TYPE_DOT1Q) instruction.add_apply_action(action) action = SetFieldAction(order=3) action.set_vlan_id(998) instruction.add_apply_action(action) action = OutputAction(order=4, port=111) instruction.add_apply_action(action) flow_entry.add_instruction(instruction) match = Match() match.set_eth_type(ETH_TYPE_ARP) match.set_vlan_id(998) match.set_in_port(in_port=110) flow_entry.add_match(match) flowEntries.append(flow_entry) # Sample flow entry flow_entry = FlowEntry() flow_entry.set_flow_cookie(1234) flow_entry.set_flow_table_id(flow_table_id) flow_entry.set_flow_id(flow_id) flow_id += 1 flow_entry.set_flow_hard_timeout(0) flow_entry.set_flow_idle_timeout(0) flow_entry.set_flow_priority(4000) instruction = Instruction(instruction_order=0) action = PushVlanHeaderAction(order=0) action.set_eth_type(ETH_TYPE_QINQ) instruction.add_apply_action(action) action = SetFieldAction(order=1) action.set_vlan_id(100) instruction.add_apply_action(action) action = PushVlanHeaderAction(order=2) action.set_eth_type(ETH_TYPE_DOT1Q) instruction.add_apply_action(action) action = SetFieldAction(order=3) action.set_vlan_id(998) instruction.add_apply_action(action) action = OutputAction(order=4, port=111) instruction.add_apply_action(action) flow_entry.add_instruction(instruction) match = Match() match.set_eth_type(ETH_TYPE_IPv4) match.set_vlan_id(998) match.set_in_port(in_port=110) flow_entry.add_match(match) flowEntries.append(flow_entry) # Sample flow entry flow_entry = FlowEntry() flow_entry.set_flow_cookie(1234) flow_entry.set_flow_table_id(flow_table_id) flow_entry.set_flow_id(flow_id) flow_id += 1 flow_entry.set_flow_hard_timeout(0) flow_entry.set_flow_idle_timeout(0) flow_entry.set_flow_priority(4000) instruction = Instruction(instruction_order=0) action = PopVlanHeaderAction(order=0) instruction.add_apply_action(action) action = OutputAction(order=1, port=110) instruction.add_apply_action(action) flow_entry.add_instruction(instruction) match = Match() match.set_eth_type(ETH_TYPE_ARP) match.set_vlan_id(100) match.set_in_port(111) flow_entry.add_match(match) flowEntries.append(flow_entry) # Sample flow entry flow_entry = FlowEntry() flow_entry.set_flow_cookie(1234) flow_entry.set_flow_table_id(flow_table_id) flow_entry.set_flow_id(flow_id) flow_id += 1 flow_entry.set_flow_hard_timeout(0) flow_entry.set_flow_idle_timeout(0) flow_entry.set_flow_priority(4000) instruction = Instruction(instruction_order=0) action = PopVlanHeaderAction(order=0) instruction.add_apply_action(action) action = OutputAction(order=1, port=110) instruction.add_apply_action(action) flow_entry.add_instruction(instruction) match = Match() match.set_eth_type(ETH_TYPE_IPv4) match.set_vlan_id(100) match.set_in_port(111) flow_entry.add_match(match) flowEntries.append(flow_entry) print ("\n") print ("<<< Remove configured flows from the Controller") ofswitch.delete_flows(flow_table_id) print ("\n") print ("<<< Set OpenFlow flows on the Controller") print ("\n") print ("<<< Flows to be configured:") flowEntries = sorted(flowEntries, key=lambda fe: fe.get_flow_priority()) for fe in flowEntries: print (" %s" % fe.to_ofp_oxm_syntax()) time.sleep(rundelay) success = True for fe in flowEntries: result = ofswitch.add_modify_flow(fe) status = result.get_status() if(status.eq(STATUS.OK)): pass else: success = False print ("\n") print ("!!!Demo terminated, failed to add flow:\n '%s'" % fe.to_ofp_oxm_syntax()) print (" Failure reason: %s" % status.detailed()) if success: print "\n" print ("<<< Flows successfully added to the Controller") else: print "\n" print ("<<< Removing all flows from the Controller") ofswitch.delete_flows(flow_table_id) exit(0) print ("\n") print ("<<< Get configured flows from the Controller") time.sleep(rundelay) print ("\n") print ("<<< Configured flows:") result = ofswitch.get_configured_FlowEntries(flow_table_id=0) status = result.get_status() if(status.eq(STATUS.OK)): data = result.get_data() flowEntries = sorted(data, key=lambda fe: fe.get_flow_priority()) for fe in flowEntries: print " %s" % fe.to_ofp_oxm_syntax() else: print ("\n") print ("!!!Demo terminated, reason: %s" % status.brief().lower()) exit(0) print ("\n") print ("<<< Get configured flows by IDs from the Controller:") time.sleep(rundelay) for i in range(flow_id_base, flow_id): result = ofswitch.get_configured_FlowEntry(flow_table_id, i) status = result.get_status() if(status.eq(STATUS.OK)): print (" -- Flow id '%s'" % i) fe = result.get_data() print " %s" % fe.to_ofp_oxm_syntax() else: print ("\n") print ("!!!Demo terminated, reason: %s" % status.brief().lower()) print ("<<< Removing all flows from the Controller") ofswitch.delete_flows(flow_table_id) exit(0) time.sleep(rundelay) print ("\n") print ("<<< Remove configured flows from the Controller") ofswitch.delete_flows(flow_table_id) time.sleep(rundelay) print ("\n") print ("<<< Get configured flows from the Controller") result = ofswitch.get_configured_FlowEntries(flow_table_id=0) status = result.get_status() if(status.eq(STATUS.DATA_NOT_FOUND)): print ("\n") print "<<< No configured flows" else: print ("\n") print ("!!!Demo terminated, reason: %s" % status.detailed()) exit(0) print ("\n") print (">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") print (">>> Demo End") print (">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
if(status.eq(STATUS.OK) == True): data = result.get_data() flowEntries = sorted(data, key=lambda fe: fe.get_flow_priority()) for fe in flowEntries: print " %s" % fe.to_ofp_oxm_syntax() else: print ("\n") print ("!!!Demo terminated, reason: %s" % status.brief().lower()) exit(0) print ("\n") print ("<<< Get configured flows by IDs from the Controller:") time.sleep(rundelay) for i in range(flow_id_base, flow_id): result = ofswitch.get_configured_FlowEntry(flow_table_id, i) status = result.get_status() if(status.eq(STATUS.OK) == True): print (" -- Flow id '%s'" % i) fe = result.get_data() print " %s" % fe.to_ofp_oxm_syntax() else: print ("\n") print ("!!!Demo terminated, reason: %s" % status.brief().lower()) print ("<<< Removing all flows from the Controller") ofswitch.delete_flows(flow_table_id) exit(0) time.sleep(rundelay)