Hello,
 
Thank you, it is OK
what I did:
    from pox.openflow.of_json import *
    core.openflow.addListeners(self)
    core.openflow.addListenerByName("FlowStatsReceived", 
self._handle_flowstats_received)
    def _handle_flowstats_received (self, event)
 
 
Best regards,


Eng Amer Alghadhban

COE

SANS-GCFW

CEH, SCNP, CCNA

 
Subject: Re: [pox-dev] Listeners in class
From: murphy.mccau...@gmail.com
Date: Wed, 6 Nov 2013 10:48:22 -0800
CC: amer7...@hotmail.com; pox-dev@lists.noxrepo.org
To: sul...@gmail.com

On Nov 6, 2013, at 9:39 AM, Sulabh Bista <sul...@gmail.com> wrote:
I don't think there are flow and port status events. I guess these are not 
'events' at all and you should fetch them when you require them.
There are, in fact (mentioned in the Statistics Events section of the manual).  
Though you may need to send requests to get them to fire. :)
On Wed, Nov 6, 2013 at 12:30 PM, Sulabh Bista <sul...@gmail.com> wrote:


Use the event name with proper case 
as:self.addListenersByname("FlowStatsReceived", self._handle_flowstate_received)

This is good advice.  Also use the correct name, as done here (the original had 
"flow*state*received" which I think would have raised an exception...).  Adding 
by name is sometimes convenient, but it's fairly "unstructured".  A safer bet 
is to actually use the event class itself (addListener(of.FlowStatsReceived, 
...)).
But there's a bigger problem here.  Events are raised by specific objects.  
Does "self" raise the FlowStatsReceived event?  Considering it wants to 
*handle* that event, probably not.  (Continued below.)
On Wed, Nov 6, 2013 at 9:01 AM, Amer <amer7...@hotmail.com> wrote:



Hello,



I would like to add listeners to flow and port status in l3.learning.py.

There is a command

Self.listento(core)

Sidenote: .listenTo() isn't used much anymore (the version of l3_learning in 
dart doesn't, for example).  Use .addListenersByName().

But it is not calling flow or port status function

It wouldn't.  You're telling it to listen to events on the core object.  Take a 
look at the events raised by the core 
object:https://github.com/noxrepo/pox/blob/carp/pox/core.py#L177
None of them have anything to do with OpenFlow.

I tried with self.addListenersByname("flowstatereceived", 
self._handle_flowstate_received)

and without self



But it is not work

Coming back to this, your event source here is "self", but this object probably 
doesn't raise the flow stats event (neither does the core object as mentioned 
just above).  POX raises OpenFlow events on the OpenFlow nexus (core.openflow) 
and on individual Connection objects, so you need to listen to those objects.  
See:https://github.com/noxrepo/pox/blob/carp/pox/openflow/__init__.py#L306https://github.com/noxrepo/pox/blob/carp/pox/openflow/of_01.py#L571
You might want to skim through the "The Event System" and "OpenFlow Events" 
section of the manual.

TLDR:Examples...
If you want to listen to all OpenFlow events, name your methods correctly and 
then use:core.openflow.addListeners(self)
If you want to listen to a specific event on a specific connection with a 
specific method, try:some_connection.addListenerByName("FlowStatsReceived", 
self._handle_flowstate_received)

Examples in code (there are many, but here are three at 
random):https://github.com/noxrepo/pox/blob/carp/pox/forwarding/l2_learning.py#L182https://github.com/noxrepo/pox/blob/carp/pox/forwarding/l2_learning.py#L86https://github.com/noxrepo/pox/blob/carp/pox/forwarding/l2_pairs.py#L85

Hope  that's helpful.
-- Murphy                                         

Reply via email to