Alan,

I've checked this on simple application:
"""
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.dpset import DPSet
from ryu.controller.handler import MAIN_DISPATCHER, set_ev_cls
from ryu.ofproto import ofproto_v1_3


class MyApp(app_manager.RyuApp):
    OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]

    _CONTEXTS = {'dpset': DPSet}

    def __init__(self, *args, **kwargs):
        super(MyApp, self).__init__(*args, **kwargs)
        self.dpset = kwargs['dpset']

    @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
    def on_packetin(self, ev):
        switches = self.dpset.get_all()
        mac_addresses = [(s[0],
s[1].ports[ofproto_v1_3.OFPP_LOCAL].hw_addr)
                         for s in switches]
        print("mac_addresses {}".format(mac_addresses))
"""

First I've started mn like this: `mn --topo=linear,2 --controller=remote`
Then I started `ryu-manager myapp --verbose`, and called `pingall` in mn.
On packetin i received:
>> EVENT ofp_event->MyApp EventOFPPacketIn
>> mac_addresses [(1, '3e:a1:63:df:fa:4e'), (2, '8e:8e:51:8f:df:47')]

Hope it helps.

If it still doesn't work check for correct switch registration by dpset -
there must be following lines in output (with --verbose flag set):
>> EVENT ofp_event->dpset EventOFPStateChange
>> DPSET: register datapath <ryu.controller.controller.Datapath object at
0x7ff879a68550>


Nick

пт, 16 сент. 2016 г. в 18:07, Alan Wang <alan820...@gmail.com>:

> Hi,
>
> Thanks for your reply.
>
> I tried your code and simulate it with mininet.
>
> But it returns empty list.
>
> How to solve the problem?
>
> Thanks,
>
> Alan
>
> 2016-09-16 21:46 GMT+08:00 Nick Sedelnikov <n.sedelni...@gmail.com>:
>
>> Hi,
>>
>> To know all registered switches try:
>> """
>> from ryu.controller.dpset import DPSet
>>
>> class MyApp(app_manager.RyuApp):
>>     # ...
>>
>>     _CONTEXTS = {'dpset': DPSet}
>>
>>     def __init__(self, *args, **kwargs):
>>         super(MyApp, self).__init__(*args, **kwargs)
>>         # ...
>>         self.dpset = kwargs['dpset']
>>         # ...
>> """
>> Then fetch switches:
>> >> switches = self.dpset.get_all()
>> >> mac_addresses = [(s[0], s[1].ports[OFPP_LOCAL].hw_addr) for s in
>> switches]
>> It will return tuple(dpid, mac_address), like this:
>> [(1, '0a:74:ba:ce:11:47'), (2, '32:5b:11:d9:72:4f')]
>>
>>
>>
>> пт, 16 сент. 2016 г. в 15:25, Alan Wang <alan820...@gmail.com>:
>>
>>> Hi All,
>>>
>>> I want to know the mac address of all switches from controller. How to
>>> get the mac
>>>
>>> address of switch?
>>>
>>> Thanks,
>>>
>>> Alan
>>>
>>> ------------------------------------------------------------------------------
>>> _______________________________________________
>>> Ryu-devel mailing list
>>> Ryu-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>>>
>>
>
------------------------------------------------------------------------------
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to