【mininet 0x04】使用ryu作为mininet的controller完成HUB功能

mininet

mininet 系列文章链接归类:

【mininet 0x01】mininet环境搭建
【mininet 0x02】如何使用mn工具来操作mininet
【mininet 0x03】如何使用Python API来操作mininet
【mininet 0x04】使用ryu作为mininet的controller完成HUB功能
【mininet 0x05】使用ryu作为mininet的controller完成L2Switch功能



前言

这一节我们将接触controller,使用开源的框架ryu,制作一个集线器(HUB)功能。


一、安装ryu

我的环境是python2.7,如果环境相同的读者可以按照下面的链接进行安装:
【RYU】python2.7环境安装RYU的方法及遇到的坑

二、 实现一个简单的HUB

from ryu.base import app_manager
from ryu.controller import  ofp_event
from ryu.controller.handler import MAIN_DISPATCHER
from ryu.controller.handler import set_ev_cls
from ryu.ofproto import ofproto_v1_0


class HUB(app_manager.RyuApp):
    OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION]
    def __init__(self, *args, **kwargs):
        super(HUB, self).__init__(self, *args, **kwargs)

    @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
    def _packet_in_handler(self, ev):
        msg = ev.msg  # ev = PacketIn'data structure  msg = openflow message
        data = None
        dp = msg.datapath  # dp=switch'id
        ofp = dp.ofproto
        ofp_parser = dp.ofproto_parser

        actions = [ofp_parser.OFPActionOutput(ofp.OFPP_FLOOD)]
        if msg.buffer_id == ofp.OFP_NO_BUFFER:
            data = msg.data

        out = ofp_parser.OFPPacketOut(
            datapath=dp, buffer_id=msg.buffer_id, in_port=msg.in_port,
            actions=actions, data=data)
        dp.send_msg(out)
        self.logger.info("switch is %s,buffer_id is %s,in_port is %s.", dp.id, msg.buffer_id, msg.in_port)
  • ev.msg:每一个事件类ev中都有msg成员,用于携带触发事件的数据包。
  • msg.datapath:已经格式化的msg其实就是一个packet_in报文,msg.datapath直接可以获得packet_in报文的datapath结构。datapath用于描述一个交换网桥。也是和控制器通信的实体单元。datapath.send_msg()函数用于发送数据到指定datapath。通过datapath.id可获得dpid数据,在后续的教程中会有使用。
  • datapath.ofproto对象是一个OpenFlow协议数据结构的对象,成员包含OpenFlow协议的数据结构,如动作类型OFPP_FLOOD。
  • datapath.ofp_parser则是一个按照OpenFlow解析的数据结构。
  • actions是一个列表,用于存放action list,可在其中添加动作。
  • 通过ofp_parser类,可以构造构造packet_out数据结构。括弧中填写对应字段的赋值即可。

三、实际效果

1、创建如下拓扑:

s1
s2
h1
h2

能够看到互ping已经通了
在这里插入图片描述
由于两个switch互连,导致环路包,如下图:
在这里插入图片描述
这种效果是符合预期的


2、再创建如下拓扑:

s1
h2
h1

能够看到互ping已经通了
在这里插入图片描述
发包收包正常:
在这里插入图片描述

总结

使用ryu作为mininet的controller,完成了hub功能。

参考

http://www.muzixing.com/pages/2014/09/20/ryuru-men-jiao-cheng.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值