[pox-dev] How can POX get packet counts (or beta transferred) from a switch within a timeline.
Weiyang Mo
moweiyang1988 at gmail.com
Thu Sep 20 14:53:44 PDT 2012
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.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.noxrepo.org/pipermail/pox-dev-noxrepo.org/attachments/20120920/b890f252/attachment-0002.htm>
More information about the pox-dev
mailing list