What you're doing looks about right.

A note here is that you have to be doing "reactive" flow installations for this 
to work -- something like what sprouting and pyswitch do.  Since these install 
exact matches on demand, you'll be likely to see the first packet of each flow 
at the controller, which you'll need if what you're looking for is the sequence 
of TCP/UDP port usage.

As well as the wiki documentation on noxrepo, you can also build doxygen 
documentation from the source code.

-- Murphy

On Mar 7, 2012, at 11:12 AM, Diana Marosin wrote:

> Hello,
> 
> Can you please be more explicit on how is this done from the flows?
> 
> I tried using the packet in callback, like this:
>         flow=extract_flow(packet)
>         if not self.port_stat.has_key(dpid):
>                 self.port_stat[dpid] = []
>         self.port_stat[dpid].append(int(flow['tp_dst']))
> 
> I would like to know if there is another way for extracting the tcp/udp 
> ports. The final goal is to retrieve all the ports sequences from a switch in 
> order to check later for patterns. 
> 
> Also, can you point me to a good documentation? I am currently using the one 
> on noxrepo.
> 
> Thanks a lot! 
> Diana
> On Sat, Feb 18, 2012 at 11:25 AM, Murphy McCauley <jam...@nau.edu> wrote:
> Ah, I begin to see the problem here. :)
> 
> The ports that the port stats are referring to are *switch ports*.  Like the 
> ethernet and wifi interfaces.  Not TCP/UDP ports.
> 
> If you want to gather statistics on TCP/UDP ports, you do that by installing 
> flows that match on those TCP/UDP ports and then monitoring the flow stats.
> 
> -- Murphy
> 
> On Feb 18, 2012, at 1:53 AM, Diana Marosin wrote:
> 
>> Hello,
>> 
>> I use a Linksys wrt54gl, v1.1.
>> 
>> With Wireshark I can identify ports 46245 for ACK controller -> switch and 
>> 22 for the SSH PC -> switch, in nox the output is totally different.
>> 
>> In nox, if I use the monitoring.py I receive empty stats and ports 1 and 
>> 65534, but if I use the packet_in_callback I can extract the port from the 
>> packet (here the 22 for the ssh)
>> 
>> Maybe I misunderstood what those stats should show, but please point me in 
>> the right direction.
>> 
>> My output is in this form :
>> Aggregate stats in from datapath 58:6d:87:62:f8:b1
>>     {'packet_count': 0L, 'byte_count': 0L, 'flow_count': 0L}
>> packet_in_callback:  58:6d:87:62:f8:b1
>> ssh packet received on port 22
>> Table stats in from datapath 58:6d:87:62:f8:b1
>>     hash2 : 0
>>     linear : 0
>> Port stats in from datapath 58:6d:87:62:f8:b1
>>     1 : 4162
>>     65534 : 0
>> 
>> My code is bellow:
>>     def aggregate_timer(self, dpid):
>>         flow = ofp_match() 
>>         flow.wildcards = 0xffffffff
>>         self.ctxt.send_aggregate_stats_request(dpid, flow,  0xff)
>>         self.post_callback(MONITOR_TABLE_PERIOD, lambda : 
>> self.aggregate_timer(dpid))
>> 
>>     def table_timer(self, dpid):
>>         self.ctxt.send_table_stats_request(dpid)
>>         self.post_callback(MONITOR_TABLE_PERIOD, lambda : 
>> self.table_timer(dpid))
>> 
>>     def port_timer(self, dpid):
>>         self.ctxt.send_port_stats_request(dpid, OFPP_NONE)
>>         self.post_callback(MONITOR_PORT_PERIOD, lambda : 
>> self.port_timer(dpid))
>> 
>>     # For each new datapath that joins, create a timer loop that monitors
>>     # the statistics for that switch
>>     def datapath_join_callback(self, dpid, stats):
>>         print "datapath_join_callback: ", longlong_to_octstr(dpid)[6:]
>>         self.post_callback(MONITOR_TABLE_PERIOD, lambda : 
>> self.table_timer(dpid))
>>         self.post_callback(MONITOR_PORT_PERIOD + 1, lambda :  
>> self.port_timer(dpid))
>>         self.post_callback(MONITOR_AGGREGATE_PERIOD + 2, lambda :  
>> self.aggregate_timer(dpid))
>> 
>>     def aggregate_stats_in_handler(self, dpid, stats):
>>         print "Aggregate stats in from datapath", 
>> longlong_to_octstr(dpid)[6:]
>>         print '\t',stats
>> 
>>     def table_stats_in_handler(self, dpid, tables):
>>         print "Table stats in from datapath", longlong_to_octstr(dpid)[6:]
>>         for item in tables:
>>             print '\t',item['name'],':',item['active_count']
>> 
>>     def port_stats_in_handler(self, dpid, ports):
>>         print "Port stats in from datapath", longlong_to_octstr(dpid)[6:]
>>         for item in ports:
>>             print '\t',item['port_no'],':',item['rx_packets']    
>>             
>>     def packet_in_callback(self, dpid, inport, reason, len, bufid, packet):
>>         flow=extract_flow(packet)
>>         if flow['tp_dst'] == 22:
>>             print "packet_in_callback: ", longlong_to_octstr(dpid)[6:]
>>             print "ssh packet received on port 22"
>>         
>>     def install(self):
>>         self.register_for_packet_in(self.packet_in_callback)
>>         self.register_for_datapath_join(lambda dpid, stats : 
>> self.datapath_join_callback(dpid,stats))
>>         self.register_for_table_stats_in(self.table_stats_in_handler)
>>         self.register_for_port_stats_in(self.port_stats_in_handler)
>>         self.register_for_aggregate_stats_in(self.aggregate_stats_in_handler)
>> 
>> 
>> Thank you!
>> Diana
>> 
>> 
>> On Fri, Feb 17, 2012 at 2:14 PM, Murphy McCauley <jam...@nau.edu> wrote:
>> What type of switch are you using, and are you sure that it's reporting the 
>> ports correctly?  I assume your ssh traffic should be going through multiple 
>> ports...
>> 
>> The first thing I'd suggest is that you check the control traffic with 
>> Wireshark and the OpenFlow dissector to see if what's coming across the wire 
>> is consistent with what you see in NOX.
>> 
>> -- Murphy
>> 
>> On Feb 17, 2012, at 5:02 AM, Diana Marosin wrote:
>> 
>> > Hello,
>> >
>> > I am trying to retrieve the ports statistics from an openflow switch using 
>> > nox. I tried to use the coreapp/ examples /monitoring.py script, but no 
>> > matter what I do (for example a ssh) I retrive only ports 1 (rx_packets 
>> > values are always increasing) and 65534 (rx_packets = 0). If I use the 
>> > packet_in_callback then from the packet I can extract the port number, but 
>> > the parameter inport is 1 (not as I would expect).
>> >
>> > Any idea on what is happening and why the stats don't work?
>> >
>> > I mention I use NOX 0.9.1-full-beta compiled with OpenFlow 0x01.
>> >
>> > Thank you,
>> > Diana _______________________________________________
>> > nox-dev mailing list
>> > nox-dev@noxrepo.org
>> > http://noxrepo.org/mailman/listinfo/nox-dev
>> 
>> 
> 
> 

_______________________________________________
nox-dev mailing list
nox-dev@noxrepo.org
http://noxrepo.org/mailman/listinfo/nox-dev

Reply via email to