Thank you very much.
On Mon, Jul 31, 2017 at 2:12 AM, Fujimoto Satoshi <
satoshi.fujimo...@gmail.com> wrote:
> 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> 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/packe
>> t_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
>> listRyu-devel@lists.sourceforge.nethttps://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