sdn 一台交换机如何同时连接2台ryu控制器?
定重谢 求大佬帮忙
不知道你这个问题是否已经解决, 如果还没有解决的话:Ryu提供了两种方式来查询交换机信息以及流表项信息:
1、REST API主动查询:
后续讲到北向接口的时候会详细讲述。
2、事件响应查询:
Ryu中提供了很多的事件,如EventOFPPortStatsReply、EventOFPFlowStatsReply等。
EventOFPPortStatsReply在端口查询返回结果时触发。
EventOFPFlowStatsReply在流量查询返回结果时触发。
simple_monitor_13.py中展示了这两个事件的应用:
详细的代码讲解可以看大哥的博客:
我这里以我毕设的部分代码为例:
@set_ev_cls(ofp_event.EventOFPPortStatsReply, MAIN_DISPATCHER)
def _port_stats_reply_handler(self, ev):#执行完send_port_stats_request后会调用该函数对查询完的端口信息进行处理
body = ev.msg.body
for port_stat in sorted(body,key=attrgetter('port_no')):
datapathid=ev.msg.datapath.id
no=port_stat.port_no
tx=port_stat.tx_bytes
p=self.port_tx[datapathid]
if no==4294967294:
continue
if no in p.keys():
self.port_tx1[datapathid][no]=tx
else:
self.port_tx[datapathid][no]=tx
def send_port_stats_request(self, datapath):#执行端口信息的查询
ofproto = datapath.ofproto
parser = datapath.ofproto_parser
req = parser.OFPPortStatsRequest(datapath)
datapath.send_msg(req)
如果相对端口的信息进行查询可以调用send_port_stats_request()函数,该函数向指定的交换机发起端口的查询请求,也就是OFPPortStatsRequest。
交换机收到查询请求后进行相应的查询,然后将查询结果返回给控制器,此时会触发事件EventOFPPortStatsReply。开始执行_port_stats_reply_handler()函数,该函数内部的处理是specific的,可以忽略,换成自己的代码就可以,其实就是对查询完的端口信息进行处理。