On Fri, 01 Mar 2019 10:55:21 +0900, David Christensen wrote: > > I'm trying to create a ryu application for a Mellanox Switch-X switch > which supports Openflow 1.0. In my test setup I have a single server > connected to two ports of the switch and I'd like the switch to > perform the following actions: > > 1) If a packet is received on port 104, send it to port 102 > 2) If a packet is received on port 102, send it to port 104 > 3) Drop any other packets from any other interfaces > > The resulting behavior should be the same as if I had connected a > cable from port 1 to port 2 of the server's NIC (i.e. a loopback > configuration), but I'm having some issues and I can't tell if it's > the ryu script or the Mellanox switch operation. > > I've adapted the simple_switch.py application and send my flow rules > to the switch as soon as I receive the OFPSwitchFeatures message from > the switch. (Some of the log output is included below.) > > The switch seems to be accepting the rules (see switch output even > further below) but no packets are ever forwarded. Can anyone comment > on what I might be doing wrong in my application or point to an > example that performs a similar function?
I'm not familiar with that hardware. > ====================================================================== > === Log output from host_loopback.py > ====================================================================== > loading app /src/host_loopback.py > loading app ryu.controller.ofp_handler > instantiating app /src/host_loopback.py of HostLoopback > instantiating app ryu.controller.ofp_handler of OFPHandler > BRICK HostLoopback > CONSUMES EventOFPPortStatus > CONSUMES EventOFPSwitchFeatures > CONSUMES EventOFPPacketIn > CONSUMES EventOFPStateChange > BRICK ofp_event > PROVIDES EventOFPPortStatus TO {'HostLoopback': set(['main'])} > PROVIDES EventOFPSwitchFeatures TO {'HostLoopback': set(['config'])} > PROVIDES EventOFPPacketIn TO {'HostLoopback': set(['main'])} > PROVIDES EventOFPStateChange TO {'HostLoopback': set(['main', 'dead'])} > CONSUMES EventOFPPortStatus > CONSUMES EventOFPEchoReply > CONSUMES EventOFPSwitchFeatures > CONSUMES EventOFPPortDescStatsReply > CONSUMES EventOFPHello > CONSUMES EventOFPErrorMsg > CONSUMES EventOFPEchoRequest > connected socket:<eventlet.greenio.base.GreenSocket object at > 0x7f5fbd3c2050> address:('9.114.219.191', 51133) > hello ev <ryu.controller.ofp_event.EventOFPHello object at 0x7f5fbd3c2950> > move onto config mode > EVENT ofp_event->HostLoopback EventOFPSwitchFeatures > switch features ev > version=0x1,msg_type=0x6,msg_len=0x80,xid=0x439c6c3c,OFPSwitchFeatures(actions=15,capabilities=11,datapath_id=16045481059359733200L,n_buffers=0,n_tables=1,ports={104: > OFPPhyPort(port_no=104,hw_addr='00:02:c9:65:35:a7',name='Eth1/6',config=0,state=0,curr=0,advertised=0,supported=0,peer=0), > 102: > OFPPhyPort(port_no=102,hw_addr='00:02:c9:65:35:a5',name='Eth1/5',config=0,state=0,curr=0,advertised=0,supported=0,peer=0)}) > move onto main mode > EVENT ofp_event->HostLoopback EventOFPStateChange > ====================================================================== > === This OFPFlowMod is intended to route packets from > === port 104 to port 102 > ====================================================================== > mod: > version=None,msg_type=None,msg_len=None,xid=None,OFPFlowMod(actions=[OFPActionOutput(max_len=65509,port=102)],buffer_id=4294967295,command=0,cookie=0,flags=1,hard_timeout=0,idle_timeout=0,match=OFPMatch(dl_dst='\x00\x00\x00\x00\x00\x00',dl_src='\x00\x00\x00\x00\x00\x00',dl_type=0,dl_vlan=0,dl_vlan_pcp=0,in_port=104,nw_dst=0,nw_proto=0,nw_src=0,nw_tos=0,tp_dst=0,tp_src=0,wildcards=4194302),out_port=102,priority=32768) I think out_port should be OFPP_NONE, and max_len in the OFPActionOutput should be meaningless as the specified output port isn't the controller. > match: > OFPMatch(dl_dst='\x00\x00\x00\x00\x00\x00',dl_src='\x00\x00\x00\x00\x00\x00',dl_type=0,dl_vlan=0,dl_vlan_pcp=0,in_port=102,nw_dst=0,nw_proto=0,nw_src=0,nw_tos=0,tp_dst=0,tp_src=0,wildcards=4194302), > actions: [OFPActionOutput(max_len=65509,port=104)] > ====================================================================== > === This OFPFlowMod is intended to route packets from > === port 102 to port 104 > ====================================================================== > mod: > version=None,msg_type=None,msg_len=None,xid=None,OFPFlowMod(actions=[OFPActionOutput(max_len=65509,port=104)],buffer_id=4294967295,command=0,cookie=0,flags=1,hard_timeout=0,idle_timeout=0,match=OFPMatch(dl_dst='\x00\x00\x00\x00\x00\x00',dl_src='\x00\x00\x00\x00\x00\x00',dl_type=0,dl_vlan=0,dl_vlan_pcp=0,in_port=102,nw_dst=0,nw_proto=0,nw_src=0,nw_tos=0,tp_dst=0,tp_src=0,wildcards=4194302),out_port=104,priority=32768) > ====================================================================== > === This OFPFlowMod is intended to drop all other traffic that doesn't > === match the previous two rules > ====================================================================== > mod: > version=None,msg_type=None,msg_len=None,xid=None,OFPFlowMod(actions=[],buffer_id=4294967295,command=0,cookie=0,flags=1,hard_timeout=0,idle_timeout=0,match=OFPMatch(dl_dst='\x00\x00\x00\x00\x00\x00',dl_src='\x00\x00\x00\x00\x00\x00',dl_type=0,dl_vlan=0,dl_vlan_pcp=0,in_port=0,nw_dst=0,nw_proto=0,nw_src=0,nw_tos=0,tp_dst=0,tp_src=0,wildcards=4194303),out_port=65535,priority=0) > switch is running > > > ====================================================================== > === Mellanox switch output > ====================================================================== > switch-5ecae6 (config) # enable > switch-5ecae6 (config) # configure terminal > switch-5ecae6 (config) # show openflow flows > > Flow id: 52 > priority: 32768 > hard timeout: infinite > idle timeout: 0 sec > ingress interface: Eth1/6 > actions: > output port Eth1/5 > statistics: > 0 packets, 0 bytes > > Flow id: 53 > priority: 32768 > hard timeout: infinite > idle timeout: 0 sec > ingress interface: Eth1/5 > actions: > output port Eth1/6 > statistics: > 558740 packets, 0 bytes The statistics suggests that packets are matched, at least. > Flow id: 54 > priority: 0 > hard timeout: infinite > idle timeout: 0 sec > actions: > output drop > statistics: > 0 packets, 0 bytes > > -- IWAMOTO Toshihiro _______________________________________________ Ryu-devel mailing list Ryu-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ryu-devel