[pox-dev] How can POX get packet counts (or beta transferred) from a switch within a timeline.

William Emmanuel Yu wyu at ateneo.edu
Thu Sep 20 17:43:28 PDT 2012


Here is the code I used to test:
https://github.com/hip2b2/poxstuff/blob/master/flow_stats.py

I still don't know how to attach debugging into Pox to dig deeper. Is
there documentation on how to do that? Worst case, I will just have to
put debugging stuff in the pox code itself. 

Thanks.

On Thu, 2012-09-20 at 17:02 -0700, Murphy McCauley wrote:
> can one or both of you post code to test?
> 
> On Sep 20, 2012 3:00 PM, "William Emmanuel S. Yu" <wyu at ateneo.edu>
> wrote:
>         Same here. Still trying to find out what is wrong. 
>         "Sent on the move."
>         
>         ______________________________________________________________
>         From: Weiyang Mo <moweiyang1988 at gmail.com>
>         Date: Thu, 20 Sep 2012 14:53:44 -0700
>         To: William Emmanuel Yu<wyu at ateneo.edu>; Murphy
>         McCauley<murphy.mccauley at gmail.com>
>         Cc: <pox-dev at lists.noxrepo.org>
>         Subject: Re: [pox-dev] How can POX get packet counts (or beta
>         transferred) from a switch within a timeline.
>         
>         
>         Hi,William
>          
>         I got the same problems on my side.  I already tried both on
>         "betta" and Murphy fork.
>          
>         It seems that whatever the traffic goes through switches, the
>         returned switch port number is always "65534" and bytes_rx
>         always 0 thus I cannot get packet counts from a specific port
>         correctly.
>          
>         Any advice?
>          
>         Thanks very much.
>          
>         Weiyang
>         
>         
>         2012/9/19 William Emmanuel Yu <wyu at ateneo.edu>
>                 Hi Weiyang,
>                 
>                 Yes. You should be using port stats for that. So I
>                 tried it myself but
>                 now I do not get any port stats data. Here is my code.
>                 It's empty. I am
>                 using the Murphy fork.
>                 
>                 On the multiple listeners, yes you can specify various
>                 actions within
>                 the callback function. In my emailed sample, I just
>                 log.debug() the
>                 output but you can do anything you like such as write
>                 to a database and
>                 the like.
>                 
>                 Good luck!
>                 
>                 On Thu, 2012-09-20 at 15:10 +1200, Sam Russell wrote:
>                 > What would it take to get your mods back into
>                 mainstream? Is there any
>                 > tidying or the like that we can help with?
>                 >
>                 > Sent from my iPhone
>                 >
>                 > On Sep 20, 2012, at 3:07 PM, Murphy McCauley
>                 > <murphy.mccauley at gmail.com> wrote:
>                 >
>                 >
>                 >
>                 > > I think that's a known problem.
>                 > >
>                 > >
>                 > > The official noxrepo fork currently has a number
>                 of known bugs which
>                 > > are addressed in my fork (MurphyMc/pox), and my
>                 fork has a number of
>                 > > other improvements.  One of these days, the
>                 changes in my fork will
>                 > > be upstreamed, but for the moment, you should
>                 really just pull POX
>                 > > from me instead of noxrepo.
>                 > >
>                 > >
>                 > > -- Murphy
>                 > >
>                 > >
>                 > > On Sep 19, 2012, at 7:33 PM, Weiyang Mo wrote:
>                 > >
>                 > > > Hi, William,
>                 > > >
>                 > > > Thanks very much. But I still have some
>                 questions about getting
>                 > > > statistics.
>                 > > >
>                 > > > As mentioned in POX wiki, We can use different
>                 statistics event to
>                 > > > get different types of statistics. What I want
>                 to get from a
>                 > > > switch is (1) it's switch ID (DPID) (2) all
>                 packet counts on each
>                 > > > port
>                 > > >
>                 > > > If I only use
>                 > > >
>                 "core.openflow.addListenerByName("FlowStatsReceived",
>                 > > > statsreceived)", the things I can get is that
>                 the total packet
>                 > > > counts from all ports, but no DPID or inport
>                 number. Thus I guess
>                 > > > I may need use
>                 > > > "of.ofp_port_stats_request()" and
>                 > > >
>                 core.openflow.addListenerByName("PortStatsReceived",
>                 > > > statsreceived)
>                 > > > But here I meet with a problem. I tried similar
>                 things as
>                 > > > ofp_flow_stats_request() as follows:
>                 > > >
>                 > > > def countrequest ():
>                 > > >   swnum = 0
>                 > > >   for connection in
>                 core.openflow._connections.values():
>                 > > >     req1 = of.ofp_port_stats_request()
>                 > > >     re1 = of.ofp_stats_request(body = req1)
>                 > > >     connection.send(re1)
>                 > > >
>                 > > > -----------------------------------
>                 > > > In the launch() function, I do the following:
>                 > > > Timer(5, countrequest, recurring = True)
>                 > > > It reports an error which will not happend to
>                 > > > ofp_flow_stats_request()
>                 > > >
>                 > > > Traceback (most recent call last):
>                 > > >   File
>                 "/home/openflow/pox/pox/lib/recoco/recoco.py", line
>                 276, in
>                 > > > cycle
>                 > > >     rv = t.execute()
>                 > > >   File
>                 "/home/openflow/pox/pox/lib/recoco/recoco.py", line
>                 94, in
>                 > > > execute
>                 > > >     return self.gen.send(v)
>                 > > >   File
>                 "/home/openflow/pox/pox/lib/recoco/recoco.py", line
>                 751, in
>                 > > > run
>                 > > >     rv = self._callback(*self._args,**self._kw)
>                 > > >   File "/home/openflow/pox/ext/test1stat.py",
>                 line 270, in
>                 > > > countrequest
>                 > > >     connection.send(re1)
>                 > > >   File
>                 "/home/openflow/pox/pox/openflow/of_01.py", line 573,
>                 in
>                 > > > send
>                 > > >     data = data.pack()
>                 > > >   File
>                 "/home/openflow/pox/pox/openflow/libopenflow_01.py",
>                 line
>                 > > > 2136, in pack
>                 > > >     packed += struct.pack("!HH", self.type,
>                 self.flags)
>                 > > > error: cannot convert argument to integer
>                 > > >
>                 > > >
>                 > > > Is there anything that I don't do correctly?
>                 > > >
>                 > > > And my another question is that even assuming I
>                 can add
>                 > > > portstatlistener and flowstatlistener as :
>                 > > >
>                 > > >
>                  core.openflow.addListenerByName("PortStatsReceived",
>                 > > > statsreceived)
>                 > > >
>                  core.openflow.addListenerByName("FlowStatsReceived",
>                 > > > statsreceived)
>                 > > >
>                 > > > Can I distinguish through statsreceived which
>                 event is which? Or
>                 > > > can I combine these two listeners together?
>                 > > >
>                 > > > Thanks very much.
>                 > > >
>                 > > > Weiyang
>                 > > >
>                 > > >
>                 > > >
>                 > > >
>                 > > >
>                 > > >
>                 > > >
>                 > > >
>                 > > >
>                 > > >
>                 > > >
>                 > > >
>                 > > > 2012/9/19 William Emmanuel Yu <wyu at ateneo.edu>
>                 > > >         Hi,
>                 > > >
>                 > > >         Attached is a flow_stats.py file that
>                 contains a sample
>                 > > >         for getting
>                 > > >         stats from all switches connected to the
>                 controller
>                 > > >         (flow_stats.py).
>                 > > >         Attached is also a file of_json.py (from
>                 Murphy) which is
>                 > > >         a helper
>                 > > >         library to convert the output into JSON
>                 format (which is
>                 > > >         much more
>                 > > >         readable than the current classes).
>                 > > >
>                 > > >         Good luck!
>                 > > >
>                 > > >         On Wed, 2012-09-19 at 10:41 -0700,
>                 Weiyang Mo wrote:
>                 > > >         > Hi, Seungwon,
>                 > > >         >
>                 > > >         > Thanks very much.
>                 > > >         >
>                 > > >         > Now it works and I can make some
>                 logical programming to
>                 > > >         do my routing
>                 > > >         > algorithm.
>                 > > >         >
>                 > > >         > Best
>                 > > >         >
>                 > > >         > Weiyang
>                 > > >         >
>                 > > >         >
>                 > > >         > 2012/9/19 Seungwon Shin
>                 <seungwon.shin at gmail.com>
>                 > > >         >         Hi, Weiyang
>                 > > >         >
>                 > > >         >
>                 > > >         >         In the case of collecting the
>                 statistical
>                 > > >         information for a
>                 > > >         >         flow table
>                 > > >         >         You can register your listener
>                 like
>                 > > >         >         -->
>                 > > >
>                 core.openflow.addListenerByName("TableStatsReceived",
>                 > > >         >         <your handler>)
>                 > > >         >
>                 > > >         >
>                 > > >         >         and your handler can parse..
>                 > > >         >
>                 > > >         >
>                 > > >         >         def <your handler>(event):
>                 > > >         >            for item in event.stats
>                 > > >         >                print item.wildcards
>                 > > >         >
>                 > > >         >
>                 > > >         >
>                 > > >         >
>                 > > >         >         You can find more information
>                 by looking at the
>                 > > >         following
>                 > > >         >         classes in POX source code
>                 (libopenflow_01.py)
>                 > > >         >
>                 > > >         >
>                 > > >         >         class ofp_flow_stats
>                 > > >         >
>                 > > >         >
>                 > > >         >         class ofp_table_stats
>                 > > >         >
>                 > > >         >
>                 > > >         >         ….
>                 > > >         >
>                 > > >         >
>                 > > >         >         Each class has its __init__
>                 function, and you
>                 > > >         will find all
>                 > > >         >         variables for stats in the
>                 function.
>                 > > >         >         The variables that you are
>                 looking for should be
>                 > > >         one of them.
>                 > > >         >         (E.g., wildcards is an initial
>                 variable of
>                 > > >         ofp_table_stats
>                 > > >         >         class).
>                 > > >         >
>                 > > >         >
>                 > > >         >         Best,
>                 > > >         >         Seungwon
>                 > > >         >
>                 > > >         >
>                 > > >         >
>                 > > >         >         On Sep 19, 2012, at 11:49 AM,
>                 Weiyang Mo
>                 > > >         >         <moweiyang1988 at gmail.com>
>                 wrote:
>                 > > >         >
>                 > > >         >         > Hi,William,
>                 > > >         >         >
>                 > > >         >         > Thanks for your advice and
>                 that's what I
>                 > > >         already did. What I
>                 > > >         >         > meant is that although I
>                 sent such request, I
>                 > > >         don't have
>                 > > >         >         > ideas how to get the reply
>                 back. I do
>                 > > >         modifications as
>                 > > >         >         > follows in
>                 forwarding.l2_learning, which sends
>                 > > >         request right
>                 > > >         >         > after sending flow entry
>                 request.
>                 > > >         >         >
>                 > > >         >         >            msg =
>                 of.ofp_flow_mod()
>                 > > >         >         >             msg.match =
>                 > > >         of.ofp_match.from_packet(packet)
>                 > > >         >         >
>                 msg.match.in_port =
>                 > > >         packet_in.in_port
>                 > > >         >         >             msg.idle_timeout
>                 = 30
>                 > > >         >         >             msg.hard_timeout
>                 = 30
>                 > > >         >         >
>                 > > >
>                 msg.actions.append(of.ofp_action_output(port =
>                 > > >         >         > out_port))
>                 > > >         >         >
>                 self.connection.send(msg)
>                 > > >         >         >
>                 > > >         >         >
>                 > > >
>                 "-----------------------------------------------------"
>                 > > >         >         >            req =
>                 of.ofp_flow_stats_request()
>                 > > >         >         >            re =
>                 of.ofp_stats_request(body =
>                 > > >         req)
>                 > > >         >         >
>                  self.connection.send(re)
>                 > > >         >         >
>                 > > >         >         > When I try pinging between
>                 hosts, it works
>                 > > >         correctly and the
>                 > > >         >         > statistics request has been
>                 sent. The question
>                 > > >         is  that the
>                 > > >         >         > switches sent "stats  reply
>                 back" to
>                 > > >         controller ( I detect
>                 > > >         >         > them through wireshark)
>                 however from
>                 > > >         controller side, I
>                 > > >         >         > don't now how to catch the
>                 reply packet and
>                 > > >         parse it as I
>                 > > >         >         > want.
>                 > > >         >         >
>                 > > >         >         > Any advice?
>                 > > >         >         >
>                 > > >         >         > Thanks very much.
>                 > > >         >         >
>                 > > >         >         > Weiyang
>                 > > >         >         >
>                 > > >         >         >
>                 > > >         >         > 2012/9/19 William Emmanuel
>                 Yu <wyu at ateneo.edu>
>                 > > >         >         >         Hi Weiyang,
>                 > > >         >         >
>                 > > >         >         >         Did you check out
>                 > > >         ofp_flow_stats_request()?
>                 > > >         >         >
>                 > > >         >         >         import
>                 pox.openflow.libopenflow_01 as
>                 > > >         of
>                 > > >         >         >         fsr =
>                 of.ofp_flow_stats_request()
>                 > > >         >         >         sr =
>                 of.ofp_stats_request(body = fsr)
>                 > > >         >         >         switch.send(sr)
>                 > > >         >         >
>                 > > >         >         >         Check out:
>                 > > >         >         >
>                 > > >
>                 https://groups.google.com/forum/?fromgroups=#!
>                 > > >         >         >
>                 topic/pox_dev/sSlfqm5Okls
>                 > > >         >         >
>                 > > >         >         >         Good luck!
>                 > > >         >         >
>                 > > >         >         >         On Tue, 2012-09-18
>                 at 08:21 -0700,
>                 > > >         Weiyang Mo wrote:
>                 > > >         >         >         > Hi,All,
>                 > > >         >         >         >
>                 > > >         >         >         > I try to use
>                 packet counts from
>                 > > >         switches within a
>                 > > >         >         >         time period (e.g
>                 > > >         >         >         > 10secs) to do some
>                 routing.  In the
>                 > > >         documentation
>                 > > >         >         >         >
>                 > > >
>                 https://openflow.stanford.edu/display/ONL/POX
>                 > > >         >         >
>                 > > >         >         >         >
>                 +Wiki#POXWiki-StatisticEvent it
>                 > > >         mentions that it's
>                 > > >         >         >         possible to do this
>                 > > >         >         >         > using a timer. I
>                 guess using 'time
>                 > > >         to wake' to
>                 > > >         >         >         call a counting
>                 > > >         >         >         > function may help.
>                 > > >         >         >         >
>                 > > >         >         >         > However I'm not
>                 famiiar with getting
>                 > > >         statistics
>                 > > >         >         >         from a switch. More
>                 > > >         >         >         > than one flow, I
>                 want to get total
>                 > > >         packet counts
>                 > > >         >         >         within 10 seconds
>                 > > >         >         >         > from all flow
>                 entries. Could you
>                 > > >         please help to
>                 > > >         >         >         give me a simple
>                 > > >         >         >         > examples about
>                 this?
>                 > > >         >         >         >
>                 > > >         >         >         > Thanks very much.
>                 > > >         >         >         >
>                 > > >         >         >         > Best
>                 > > >         >         >         >
>                 > > >         >         >         > Weiyang
>                 > > >         >         >         >
>                 > > >         >         >         >
>                 > > >         >         >
>                 > > >         >         >
>                 > > >         >         >         --
>                 > > >         >         >
>                 > > >
>                 -------------------------------------------------------
>                 > > >         >         >         William Emmanuel S.
>                 Yu, Ph.D. (杨怀义)
>                 > > >         >         >         Department of
>                 Information Systems and
>                 > > >         Computer
>                 > > >         >         >         Science
>                 > > >         >         >         Ateneo de Manila
>                 University
>                 > > >         >         >         email  :  wyu at
>                 ateneo dot edu
>                 > > >         >         >         blog   :
>                  http://hip2b2.yutivo.org/
>                 > > >         >         >         web    :
>                 > > >          http://CNG.ateneo.edu/cng/wyu/
>                 > > >         >         >         phone  :
>                  +63(2)4266001 loc. 4186
>                 > > >         >         >         GPG    :
>                 > > >          http://CNG.ateneo.net/cng/wyu/wyy.pgp
>                 > > >         >         >
>                 > > >         >         >         Confidentiality
>                 Issue:  This message
>                 > > >         is intended
>                 > > >         >         >         only for the use of
>                 the
>                 > > >         >         >         addressee and may
>                 contain information
>                 > > >         that is
>                 > > >         >         >         privileged and
>                 > > >         >         >         confidential. If you
>                 are not the
>                 > > >         intended recipient,
>                 > > >         >         >         you are hereby
>                 > > >         >         >         notified that any
>                 use or dissemination
>                 > > >         of this
>                 > > >         >         >         communication is
>                 strictly
>                 > > >         >         >         prohibited.  If you
>                 have received this
>                 > > >         communication
>                 > > >         >         >         in error, please
>                 > > >         >         >         notify us
>                 immediately by reply and
>                 > > >         delete this
>                 > > >         >         >         message from your
>                 system.
>                 > > >         >         >
>                 > > >         >         >
>                 > > >         >
>                 > > >         >
>                 > > >         >
>                 > > >
>                 > > >         --
>                 > > >
>                 -------------------------------------------------------
>                 > > >         William Emmanuel S. Yu, Ph.D. (杨怀义)
>                 > > >         Department of Information Systems and
>                 Computer Science
>                 > > >         Ateneo de Manila University
>                 > > >         email  :  wyu at ateneo dot edu
>                 > > >         blog   :  http://hip2b2.yutivo.org/
>                 > > >         web    :  http://CNG.ateneo.edu/cng/wyu/
>                 > > >         phone  :  +63(2)4266001 loc. 4186
>                 > > >         GPG    :
>                  http://CNG.ateneo.net/cng/wyu/wyy.pgp
>                 > > >
>                 > > >         Confidentiality Issue:  This message is
>                 intended only for
>                 > > >         the use of the
>                 > > >         addressee and may contain information
>                 that is privileged
>                 > > >         and
>                 > > >         confidential. If you are not the
>                 intended recipient, you
>                 > > >         are hereby
>                 > > >         notified that any use or dissemination
>                 of this
>                 > > >         communication is strictly
>                 > > >         prohibited.  If you have received this
>                 communication in
>                 > > >         error, please
>                 > > >         notify us immediately by reply and
>                 delete this message
>                 > > >         from your system.
>                 > > >
>                 > > >
>                 > >
>                 > >
>                 
>                 --
>                 -------------------------------------------------------
>                 William Emmanuel S. Yu, Ph.D. (杨怀义)
>                 Department of Information Systems and Computer Science
>                 Ateneo de Manila University
>                 email  :  wyu at ateneo dot edu
>                 blog   :  http://hip2b2.yutivo.org/
>                 web    :  http://CNG.ateneo.edu/cng/wyu/
>                 phone  :  +63(2)4266001 loc. 4186
>                 GPG    :  http://CNG.ateneo.net/cng/wyu/wyy.pgp
>                 
>                 Confidentiality Issue:  This message is intended only
>                 for the use of the
>                 addressee and may contain information that is
>                 privileged and
>                 confidential. If you are not the intended recipient,
>                 you are hereby
>                 notified that any use or dissemination of this
>                 communication is strictly
>                 prohibited.  If you have received this communication
>                 in error, please
>                 notify us immediately by reply and delete this message
>                 from your system.
>                 
>         
>         

-- 
-------------------------------------------------------
William Emmanuel S. Yu, Ph.D. (杨怀义)
Department of Information Systems and Computer Science
Ateneo de Manila University
email  :  wyu at ateneo dot edu
blog   :  http://hip2b2.yutivo.org/
web    :  http://CNG.ateneo.edu/cng/wyu/
phone  :  +63(2)4266001 loc. 4186
GPG    :  http://CNG.ateneo.net/cng/wyu/wyy.pgp

Confidentiality Issue:  This message is intended only for the use of the
addressee and may contain information that is privileged and
confidential. If you are not the intended recipient, you are hereby
notified that any use or dissemination of this communication is strictly
prohibited.  If you have received this communication in error, please
notify us immediately by reply and delete this message from your system.




More information about the pox-dev mailing list