Hi, Thanks for your reply kindly.
I tried your code. It can run to achieve my goal. But i tried to add them to the function switch_features_handle of simple_switch_13. The result returned empty dict. Why? @set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER) def switch_features_handler(self, ev): datapath = ev.msg.datapath ofproto = datapath.ofproto parser = datapath.ofproto_parser match = parser.OFPMatch() actions = [parser.OFPActionOutput(ofproto.OFPP_CONTROLLER, ofproto.OFPCML_NO_BUFFER)] self.add_flow(datapath, 0, match, actions) 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)) Thanks, Regards, Alan 2016-09-17 6:32 GMT+08:00 Nick Sedelnikov <n.sedelni...@gmail.com>: > 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