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

Murphy McCauley murphy.mccauley at gmail.com
Thu Sep 20 18:57:38 PDT 2012


Are you sure there's anything wrong here?  Are you actually installing flows?

Port 65534 is OFPP_LOCAL; this flow is apparently permanently installed.  I don't offhand know exactly why, but it's probably to enable communication with the controller or something.

If I actually install flows, they show up just fine for me.  Run flow_stats and forwarding.l2_learning at the same time, and then do a ping between hosts on your switches.  No problem here -- flows show up just fine.

-- Murphy

On Sep 20, 2012, at 5:43 PM, William Emmanuel Yu wrote:

> 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