Hi, Boyan
get_protocol() returns None if the argument doesn't match to the packet.
So, I guess Ryu might catch a packet other than TCP or UDP, such as SCTP.
If you doesn't need to make a flow for other than TCP or UDP, the code
should be like this:
if pkt.get_protocol(tcp.tcp):
l4 = pkt.get_protocol(tcp.tcp)
else if pkt.get_protocol(udp.udp):
l4 = pkt.get_protocol(udp.udp)
else:
# ignore packets other than TCP or UDP
return
Thanks,
Fujimoto
On 2017年07月28日 17:39, Boyan Mladenov wrote:
Hi, Fujimoto Satoshi
Thank you very much for the attachment, it is really helpful.
When i run the application i get the following error and i just can't
understand why, because everything seems right.
Any suggestions?
File
"/home/boyan/.local/lib/python2.7/site-packages/ryu/base/app_manager.py",
line 290, in _event_loop
handler(ev)
File "/home/boyan/ryu/ryu/app/test99.py", line 93, in _packet_in_handler
src_port = l4.src_port
AttributeError: 'NoneType' object has no attribute 'src_port'
The code is:
if pkt.get_protocol(ipv4.ipv4):
ip = pkt.get_protocol(ipv4.ipv4)
src_addr = ip.src
dst_addr = ip.dst
if pkt.get_protocol(tcp.tcp):
l4 = pkt.get_protocol(tcp.tcp)
else:
l4 = pkt.get_protocol(udp.udp)
src_port = l4.src_port
dst_port = l4.dst_port
out_port = self.mac_to_port[dpid][eth.dst]
actions = [parser.OFPActionOutput(out_port)]
Thanks
On Thu, Jul 27, 2017 at 4:59 AM, Fujimoto Satoshi
<satoshi.fujimo...@gmail.com <mailto:satoshi.fujimo...@gmail.com>> wrote:
Hi, Boyan
Sorry for delaying.
You can use get_protocol() to extract informations from packet.
For example, get_protocol(tcp.tcp) will get a TCP instance if the
packet is a TCP protocol packet.
And the TCP instance has sport/dport fields, so you can get
informations to build your flows:
http://ryu.readthedocs.io/en/latest/library_packet_ref/packet_tcp.html
<http://ryu.readthedocs.io/en/latest/library_packet_ref/packet_tcp.html>
I tried to modify simple_switch_13.py to build flows for each IP
src/dst TCP/UDP sport/dport and attach it to this mail.
I wish it will help your understanding.
Thanks,
Fujimoto
On 2017年07月25日 09:41, Boyan Mladenov wrote:
Dear, all
I am trying to modify the simple_switch_13.py so that i can
extract and save flow statistics about the IP src/dst TCP/UDP
sport/dport. I got familiar with the simple switch and the
traffic monitor from where i get the function for continuously
showing and the data. Also the functions about flow stats request
and reply.
I am having problems creating the match fields in order to modify
the flow table to show ip_src, ip_dst, tcp_sport, tcp_dport,
protocols.
I have to create each single line (flow) in the table, In simple
switch the match is the ingress port, but in my case i have to
modify it in order to display the IPs IPd TCPs UDPs TCPd UDPd.
Probably the steps to follow are to extract the info from the
packet in, building a table like mac_to_port in order to get the
instructions out to specific port build the flow mod, putting
together the match and the action and send it to the switch - to
fill the table.
I have read the ryubook and ryureadthedocs - saw the functions
under messages and structures, and other but still çan't figure
out where to to write the new functions, and what to leave from
the simple switch.
I will greatly appreciate if someone is willing to help me. it
will be really nice to see an example of match field of IPs/d
build into the simplle switch.
Thank you in advance .
from operator import attrgetter
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import CONFIG_DISPATCHER,
MAIN_DISPATCHER, DEAD_DISPATCHER
from ryu.controller.handler import set_ev_cls
from ryu.ofproto import ofproto_v1_3
from ryu.lib.packet import packet
from ryu.lib.packet import ipv4
from ryu.lib.packet import tcp
from ryu.lib.packet import ethernet
from ryu.lib.packet import ether_types
from ryu.lib import hub
class SimpleSwitch13(app_manager.RyuApp):
OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
def __init__(self, *args, **kwargs):
super(SimpleSwitch13, self).__init__(*args, **kwargs)
self.mac_to_port = {}
self.datapaths = {}
self.monitor_thread = hub.spawn(self._monitor)
@set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
def switch_features_handler(self, ev):
datapath = ev.msg.datapath
ofproto = datapath.ofproto
parser = datapath.ofproto_parser
match = parser.OFPMatch()
actions = [parser.OFPActionOutput(ofproto.OFPP_CONTROLLER,
ofproto.OFPCML_NO_BUFFER)]
self.add_flow(datapath, 0, match, actions)
def add_flow(self, datapath, priority, match, actions,
buffer_id=None):
ofproto = datapath.ofproto
parser = datapath.ofproto_parser
inst =
[parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,
actions)]
if buffer_id:
mod = parser.OFPFlowMod(datapath=datapath,
buffer_id=buffer_id,
priority=priority, match=match,
instructions=inst)
else:
mod = parser.OFPFlowMod(datapath=datapath,
priority=priority,
match=match, instructions=inst)
datapath.send_msg(mod)
@set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
def _packet_in_handler(self, ev):
if ev.msg.msg_len < ev.msg.total_len:
self.logger.debug("packet truncated: only %s of %s
bytes",
ev.msg.msg_len, ev.msg.total_len)
msg = ev.msg
datapath = msg.datapath
ofproto = datapath.ofproto
parser = datapath.ofproto_parser
in_port = msg.match['in_port']
pkt = packet.Packet(msg.data)
eth = pkt.get_protocol(ethernet.ethernet)
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org!http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
<mailto:Ryu-devel@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel