Dear Ryu support team,
I have a pretty simple Ryu app which should keep the datapath when
initialized and send a packet to the switch whenever the send_packet method
is triggered.
The problem is that the switch doesn't get the packet and whenever the
send_packet is triggered the datapath is being reset.
Here is the simplified version of my app:
class PacketTracingController(app_manager.RyuApp):
@set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
def initialize_on_connect(self, ev):
self._datapath = ev.msg.datapath
self.log.info('set datapath: {}'.format(self._datapath.id))
@set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
def handle_packet_in_user_space(self, ev):
msg = ev.msg
self.log.info("table_id: {}".format(msg.table_id))
self.log.info("received data: {}".format(msg.data))
def send_packet(self, packet):
data = packet.data
ofproto = self._datapath.ofproto
ofp_parser = self._datapath.ofproto_parser
req = ofp_parser.OFPPacketOut(datapath=self._datapath,
buffer_id=ofproto.OFP_NO_BUFFER,
in_port=ofproto.OFPP_LOCAL,
actions=[],
data=data)
self._datapath.send_msg(req)
self.log.info(
'dp.id: {} pkt: {}'.format(self._datapath.id, packet))
Here is how I trigger the send_packet:
# ... Initialize with AppManager.run_apps and do some other initializations
# Create a sample packet
pkt = ethernet.ethernet(ethertype=ETH_TYPE_ARP) /\
arp.arp(src_ip='192.168.70.2', dst_ip='192.168.70.3')
pkt.serialize()
manager = AppManager.get_instance()
manager.applications[PacketTracingController.__name__] \
.send_packet(pkt.data)
import time
time.sleep(5)
Here are all the flows installed on the switch:
NXST_FLOW reply (xid=0x4):
cookie=0x0, table=0, n_packets=0, n_bytes=0,
priority=5,ip,nw_dst=192.168.128.0/24 actions=CONTROLLER:65535
cookie=0x0, table=0, n_packets=0, n_bytes=0, priority=0 actions=resubmit(,1)
cookie=0x0, table=1, n_packets=0, n_bytes=0, priority=10,in_port=32768
actions=set_field:0x1->reg1,resubmit(,2),set_field:0->reg0
cookie=0x0, table=1, n_packets=0, n_bytes=0, priority=10,in_port=LOCAL
actions=set_field:0x10->reg1,resubmit(,2),set_field:0->reg0
cookie=0x0, table=2, n_packets=0, n_bytes=0,
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:7a:f5:18:a2:71:45,load:0x2->NXM_OF_ARP_OP[],move:NXM_NX_ARP_SHA[]->NXM_NX_ARP_THA[],load:0x7af518a27145->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, table=2, n_packets=0, n_bytes=0,
priority=7,arp,reg1=0x10,reg5=0x1 actions=CONTROLLER:65535
cookie=0x0, table=2, n_packets=0, n_bytes=0, priority=0,arp,reg1=0x10
actions=drop
cookie=0x0, table=2, n_packets=0, n_bytes=0, priority=0,ip,reg1=0x1
actions=set_field:7a:f5:18:a2:71:45->eth_dst,resubmit(,3),set_field:0->reg0
cookie=0x0, table=2, n_packets=0, n_bytes=0, priority=0
actions=resubmit(,3),set_field:0->reg0
cookie=0x0, table=3, n_packets=0, n_bytes=0, priority=0
actions=resubmit(,4),set_field:0->reg0
cookie=0x0, table=4, n_packets=0, n_bytes=0, priority=0
actions=resubmit(,5),set_field:0->reg0
cookie=0x1, table=5, n_packets=0, n_bytes=0,
priority=0,ip,reg1=0x10,metadata=0x1/0x1 actions=CONTROLLER:65535
cookie=0x1, table=5, n_packets=0, n_bytes=0,
priority=0,ip,reg1=0x1,metadata=0x1/0x1 actions=CONTROLLER:65535
cookie=0x0, table=6, n_packets=0, n_bytes=0, priority=0,ip,reg1=0x10
actions=resubmit(,7),set_field:0->reg0
cookie=0x0, table=6, n_packets=0, n_bytes=0, priority=0,ip,reg1=0x1
actions=resubmit(,7),set_field:0->reg0
cookie=0x0, table=7, n_packets=0, n_bytes=0, priority=0,ip,reg1=0x10
actions=resubmit(,20),set_field:0->reg0
cookie=0x0, table=7, n_packets=0, n_bytes=0, priority=0,ip,reg1=0x1
actions=resubmit(,20),set_field:0->reg0
cookie=0x0, table=20, n_packets=0, n_bytes=0, priority=0,reg1=0x10
actions=output:32768
cookie=0x0, table=20, n_packets=0, n_bytes=0, priority=0,reg1=0x1 actions=LOCAL
Here is what I see when triggering send_packet:
INFO:logger set datapath: 135193098875205
INFO:logger: dp.id: 135193098875205 pkt:
ethernet(dst='ff:ff:ff:ff:ff:ff',ethertype=2054,src='00:00:00:00:00:00'),
arp(dst_ip='0.0.0.0',dst_mac='ff:ff:ff:ff:ff:ff',hlen=6,hwtype=1,opcode=1,plen=4,proto=2048,src_ip='0.0.0.0',src_mac='ff:ff:ff:ff:ff:ff')
INFO:logger: disconnect
INFO:logger:ArpController:Setting default eth_dst to gtp_br0
INFO:logger set datapath: 135193098875205
Can you please point me to what I might be doing wrong?
Thanks
Best,
Martin
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel