Ryu拓扑发现原理分析.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Ryu拓扑发现原理分析

Ryu拓扑发现原理分析Ryu拓扑发现的核心模块是ryu/topology目录下的switches.py,拓扑发现的应用是同目录下的dumper.py。在dumper.py中,会利用_CONTEXTS来实例化switches.py中的Switches类,然后将拓扑发现的相关信息通过日志方式(LOG.debug)显示。启动命令如下所示:ryu-manager –verbose –observe-links ryu.topology.dumper 或者ryu-manager –verbose –observe-links ./ryu/topology/dumper.py其中–verbose参数用于显示LOG.debug信息,–observe-links用于指明拓扑发现。接下来对拓扑发现的核心模块switches.py进行分析。1. Port类存储端口相关信息,数据成员有:self.dpid = dpidself._ofproto = ofprotoself._config = ofpport.configself._state = ofpport.stateself.port_no = ofpport.port_noself.hw_addr = ofpport.hw_ = 其中要特别注意的是dpid和port_no,即交换机ID和端口号,这两个信息在下发流表项时很重要。2. Switch类存储交换机相关信息,数据成员有:self.dp = dpself.ports = []其中dp是Datapath类的实例,该类定义在在ryu/controller/controller.py,主要属性有:self.socket = socketself.address = addressself.is_active = Trueself.id = None # datapath_id is unknown yetself.ports = Noneports是一个由Port类实例组成的列表,存储该交换机的端口。3. Link类保存的是源端口和目的端口(都是Port类实例),数据成员有:self.src = srcself.dst = dst4. PortState类该类继承自dict,保存了从port_no(int型)到port(OFPPort类实例)的映射。该类主要用作self.port_state字典的值(键是dpid),用于存储dpid对应的交换机的所有端口情况。OFPPort类定义在ryu/ofproto目录下对应的ofproto_v1_X_parser.py中(X代表版本号),继承自一个namedtuple,保存有port_no等信息。5. PortData类保存每个端口与对应的LLDP报文数据,数据成员有:self.is_down = is_downself.lldp_data = lldp_data(这是LLDP报文的数据)self.timestamp = Noneself.sent = 0每调用一次lldp_sent函数,便会把self.timestamp置为当前的时间(time.time()),并将self.sent加1;每调用一次lldp_received函数,便会把self.sent置为0。6.PortDataState类继承自dict类,保存从Port类到PortData类的映射。该类维护了一个类似双向循环链表的数据结构,并重写了__iter__(),使得遍历该类的实例(self.ports)时,会按照该双向循环链表从哨兵节点(self._root)后一个节点开始遍历。包含一个add_port函数,传入port和lldp_data,port作键,构建的PortData类实例作为值。包含一个lldp_sent(self,port)函数,根据传入的port(Port类实例)获得对应的PortData类实例port_data,然后调用port_data.lldp_sent()(该函数会设置时间戳),再调用self._move_last_key(port),把该port移到类似双向循环链表的数据结构中哨兵节点的前面(相当于下次遍历的末尾);最后返回port_data。7. LinkState类继承自dict,保存从Link类到时间戳的映射。数据成员self._map字典用于存储Link两端互相映射的关系。8. LLDPPacket类静态方法lldp_packet(dpid,port_no,dl_addr,ttl)用于构造LLDP报文,静态方法lldp_parse(data)用于解析LLDP包,并返回源DPID和源端口号。9. Switches类该类是Ryu拓扑发现的核心所在。Switches类是app_manager.RyuApp类的

文档评论(0)

tianma2015 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档