I have few of questions. - Have you enabled openflow 1.4 on your ovs?
- Have you installed a matching flow rules to direct the packet?
- Is there only one switch in your network?
Dear Ryu support team,
I have a simple Ryu app which should be responsible for - initiating a packet-send after setting a register bit
- Receiving that packet in the user-space when it propagates through the switch
The problem I'm having is that the message is not being sent to the switch (or not being sent to the user space after because I'm not able to receive anything with a @set_ev_cls(ofp_ event.EventOFPPacketIn, MAIN_DISPATCHER).
As I want to initiate the packet-send from outside the Ryu app, I'm storing the datapath of the ryu app when it's being initialized and then getting the instance of the app from the AppManager and call the send_packet on the instance of the app.
Main component:
Ryu App: # Set up ARP r
class PacketTracingController(app_manager.RyuApp):
@set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
def initialize_on_connect(self, ev):
self._datapath = ev.msg.datapath
# Error handling and what happens on disconnect is removed for
# simplicity @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER) def handle_packet_in_user_space(self, ev): msg = ev.msg self.log.info("[TRACER] table_id: {}".format(msg.table_id)) self.log.info("[TRACER] received data: {}".format(msg.data))
def send_packet(self, packet): data = "">packet.data ofproto = self._datapath.ofproto ofp_parser = self._datapath.ofproto_parser actions = [ ofp_parser.NXActionRegLoad2(dst='reg5', value=0x100), ofp_parser.NXActionRegLoad2(dst='reg1', value=0x10), ofp_parser.OFPActionOutput(port=ofproto.OFPP_FLOOD) ] req = ofp_parser.OFPPacketOut(datapath=self._datapath, buffer_id=ofproto.OFP_NO_BUFFER, in_port=ofproto.OFPP_CONTROLLER, actions=actions, data=data) self._datapath.send_msg(req) self.log.info( 'dp.id: {} pkt: {}'.format(self._datapath.id, packet))
I can see that initialize_on_connect works fine, send_packet is getting triggered, but unfortunately, I cannot get any message in handle_packet_in_user_space.
And if I print the flows with ovs-ofctl dump-flows before and after sending the packet they are identical (in terms of n_packets and n_bytes).
Here is the dump output: NXST_FLOW reply (xid=0x4): cookie=0x0, duration=135.952s, table=0, n_packets=0, n_bytes=0, idle_age=135, priority=5,ip,nw_dst=192.168.128.0/24 actions=CONTROLLER:65535 cookie=0x0, duration=135.952s, table=0, n_packets=1, n_bytes=70, idle_age=11, priority=0 actions=resubmit(,1) cookie=0x0, duration=195.940s, table=1, n_packets=0, n_bytes=0, idle_age=195, priority=10,in_port=32768 actions=set_field:0x1->reg1,resubmit(,2),set_field:0->reg0 cookie=0x0, duration=195.940s, table=1, n_packets=1, n_bytes=70, idle_age=11, priority=10,in_port=LOCAL actions=set_field:0x10->reg1,resubmit(,2),set_field:0->reg0 cookie=0x0, duration=195.941s, table=2, n_packets=0, n_bytes=0, idle_age=195, priority=10,arp,reg1=0x10,arp_tpa=192.168.128.0/24 actions=move:NXM_OF_ETH_SRC[]->NXM_OF_ETH_DST[],mod_dl_src:ca:cc:21:51:b0:45,load:0x2->NXM_OF_ARP_OP[],move:NXM_NX_ARP_SHA[]->NXM_NX_ARP_THA[],load:0xcacc2151b045->NXM_NX_ARP_SHA[],move:NXM_OF_ARP_TPA[]->NXM_NX_REG0[],move:NXM_OF_ARP_SPA[]->NXM_OF_ARP_TPA[],move:NXM_NX_REG0[]->NXM_OF_ARP_SPA[],IN_PORT cookie=0x0, duration=195.941s, table=2, n_packets=0, n_bytes=0, idle_age=195, priority=1,arp,reg1=0x10,reg5=0 actions=drop cookie=0x0, duration=195.941s, table=2, n_packets=0, n_bytes=0, idle_age=195, priority=8,arp,reg1=0x10,reg5=0x100 actions=CONTROLLER:65535 cookie=0x0, duration=195.941s, table=2, n_packets=0, n_bytes=0, idle_age=195, priority=1,ip,reg1=0x1 actions=set_field:ca:cc:21:51:b0:45->eth_dst,resubmit(,3),set_field:0->reg0 cookie=0x0, duration=195.941s, table=2, n_packets=1, n_bytes=70, idle_age=11, priority=1 actions=resubmit(,3),set_field:0->reg0 cookie=0x0, duration=195.941s, table=4, n_packets=0, n_bytes=0, idle_age=195, priority=1 actions=resubmit(,5),set_field:0->reg0 cookie=0x1, duration=195.940s, table=5, n_packets=0, n_bytes=0, idle_age=195, priority=1,ip,reg1=0x10,metadata=0x1/0x1 actions=CONTROLLER:65535 cookie=0x1, duration=195.940s, table=5, n_packets=0, n_bytes=0, idle_age=195, priority=1,ip,reg1=0x1,metadata=0x1/0x1 actions=CONTROLLER:65535 cookie=0x0, duration=195.940s, table=6, n_packets=0, n_bytes=0, idle_age=195, priority=1,ip,reg1=0x10 actions=resubmit(,7),set_field:0->reg0 cookie=0x0, duration=195.940s, table=6, n_packets=0, n_bytes=0, idle_age=195, priority=1,ip,reg1=0x1 actions=resubmit(,7),set_field:0->reg0 cookie=0x0, duration=195.941s, table=7, n_packets=0, n_bytes=0, idle_age=195, priority=1,ip,reg1=0x10 actions=resubmit(,20),set_field:0->reg0 cookie=0x0, duration=195.941s, table=7, n_packets=0, n_bytes=0, idle_age=195, priority=1,ip,reg1=0x1 actions=resubmit(,20),set_field:0->reg0 cookie=0x0, duration=195.941s, table=20, n_packets=0, n_bytes=0, idle_age=195, priority=1,reg1=0x10 actions=output:32768 cookie=0x0, duration=195.941s, table=20, n_packets=0, n_bytes=0, idle_age=195, priority=1,reg1=0x1 actions=LOCAL
Sending: ethernet(dst='5e:cc:cc:b1:49:4b',ethertype=2048,src=''), arp(dst_ip='192.168.70.3',dst_mac='ff:ff:ff:ff:ff:ff',hlen=6,hwtype=1,opcode=1,plen=4,proto=2048,src_ip='192.168.70.2',src_mac='ff:ff:ff:ff:ff:ff')
----- AFTER SEND ----- NXST_FLOW reply (xid=0x4): cookie=0x0, duration=137.961s, table=0, n_packets=0, n_bytes=0, idle_age=137, priority=5,ip,nw_dst=192.168.128.0/24 actions=CONTROLLER:65535 cookie=0x0, duration=137.961s, table=0, n_packets=1, n_bytes=70, idle_age=13, priority=0 actions=resubmit(,1) cookie=0x0, duration=197.949s, table=1, n_packets=0, n_bytes=0, idle_age=197, priority=10,in_port=32768 actions=set_field:0x1->reg1,resubmit(,2),set_field:0->reg0 cookie=0x0, duration=197.949s, table=1, n_packets=1, n_bytes=70, idle_age=13, priority=10,in_port=LOCAL actions=set_field:0x10->reg1,resubmit(,2),set_field:0->reg0 cookie=0x0, duration=197.950s, table=2, n_packets=0, n_bytes=0, idle_age=197, priority=10,arp,reg1=0x10,arp_tpa=192.168.128.0/24 actions=move:NXM_OF_ETH_SRC[]->NXM_OF_ETH_DST[],mod_dl_src:ca:cc:21:51:b0:45,load:0x2->NXM_OF_ARP_OP[],move:NXM_NX_ARP_SHA[]->NXM_NX_ARP_THA[],load:0xcacc2151b045->NXM_NX_ARP_SHA[],move:NXM_OF_ARP_TPA[]->NXM_NX_REG0[],move:NXM_OF_ARP_SPA[]->NXM_OF_ARP_TPA[],move:NXM_NX_REG0[]->NXM_OF_ARP_SPA[],IN_PORT cookie=0x0, duration=197.950s, table=2, n_packets=0, n_bytes=0, idle_age=197, priority=1,arp,reg1=0x10,reg5=0 actions=drop cookie=0x0, duration=197.950s, table=2, n_packets=0, n_bytes=0, idle_age=197, priority=8,arp,reg1=0x10,reg5=0x100 actions=CONTROLLER:65535 cookie=0x0, duration=197.950s, table=2, n_packets=0, n_bytes=0, idle_age=197, priority=1,ip,reg1=0x1 actions=set_field:ca:cc:21:51:b0:45->eth_dst,resubmit(,3),set_field:0->reg0 cookie=0x0, duration=197.950s, table=2, n_packets=1, n_bytes=70, idle_age=13, priority=1 actions=resubmit(,3),set_field:0->reg0 cookie=0x0, duration=197.950s, table=4, n_packets=0, n_bytes=0, idle_age=197, priority=1 actions=resubmit(,5),set_field:0->reg0 cookie=0x1, duration=197.949s, table=5, n_packets=0, n_bytes=0, idle_age=197, priority=1,ip,reg1=0x10,metadata=0x1/0x1 actions=CONTROLLER:65535 cookie=0x1, duration=197.949s, table=5, n_packets=0, n_bytes=0, idle_age=197, priority=1,ip,reg1=0x1,metadata=0x1/0x1 actions=CONTROLLER:65535 cookie=0x0, duration=197.949s, table=6, n_packets=0, n_bytes=0, idle_age=197, priority=1,ip,reg1=0x10 actions=resubmit(,7),set_field:0->reg0 cookie=0x0, duration=197.949s, table=6, n_packets=0, n_bytes=0, idle_age=197, priority=1,ip,reg1=0x1 actions=resubmit(,7),set_field:0->reg0 cookie=0x0, duration=197.950s, table=7, n_packets=0, n_bytes=0, idle_age=197, priority=1,ip,reg1=0x10 actions=resubmit(,20),set_field:0->reg0 cookie=0x0, duration=197.950s, table=7, n_packets=0, n_bytes=0, idle_age=197, priority=1,ip,reg1=0x1 actions=resubmit(,20),set_field:0->reg0 cookie=0x0, duration=197.950s, table=20, n_packets=0, n_bytes=0, idle_age=197, priority=1,reg1=0x10 actions=output:32768 cookie=0x0, duration=197.950s, table=20, n_packets=0, n_bytes=0, idle_age=197, priority=1,reg1=0x1 actions=LOCAL
I'm using OFP_VERSIONS = [ofproto_v1_4.OFP_VERSION] Can you please point me to what I'm doing wrong?
Thanks a lot! Best, Martin
|