拓扑图如下:

无控制器下的openflow流表下发演示

创建一个交换机,3台主机,无控制器,流表手工下发:

# mn --topo single,3 --controller=none --mac

mininet>sh ovs-ofctl add-flow s1 "table=0,dl_dst=00:00:00:00:00:01,dl_type=0x0800,actions=output:1"

mininet>sh ovs-ofctl add-flow s1 "table=0,dl_dst=00:00:00:00:00:02,dl_type=0x0800,actions=output:2"

mininet>sh ovs-ofctl add-flow s1 "table=0,dl_dst=00:00:00:00:00:03,dl_type=0x0800,actions=output:3"

mininet>sh ovs-ofctl add-flow s1 "table=0,priority=100,dl_type=0x0806,actions=flood"

有控制器下的演示:

用RYU作控制器:

[root@localhost~]# ryu-manager simple_controller.py

[root@localhost~]# mn --topo single,3  --mac  --controller=remote,ip=127.0.0.1,port=6633

mininet> h1 ping h2 -c2

PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.

64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.049 ms

64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.061 ms

--- 10.0.0.2 ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1004ms

rtt min/avg/max/mdev = 0.049/0.055/0.061/0.006 ms

mininet>

mininet> sh ovs-ofctl dump-flows  s1

NXST_FLOW reply (xid=0x4):

cookie=0x0, duration=2067.822s, table=0, n_packets=142, n_bytes=5964, idle_age=5, priority=100,arp actions=FLOOD

cookie=0x0, duration=2066.811s, table=0, n_packets=1934, n_bytes=189532, idle_age=0, priority=10,ip,dl_dst=00:00:00:00:00:02 actions=output:2

cookie=0x0, duration=2065.819s, table=0, n_packets=1949, n_bytes=191002, idle_age=0, priority=10,ip,dl_dst=00:00:00:00:00:01 actions=output:1

cookie=0x0, duration=185.310s, table=0, n_packets=17, n_bytes=1666, idle_age=168, priority=10,ip,dl_dst=00:00:00:00:00:03 actions=output:3

cookie=0x0, duration=194.586s, table=0, n_packets=10, n_bytes=756, idle_age=185, priority=0 actions=CONTROLLER:65535

控制器代码如下:

[root@localhost~]# cat simple_controller.py

from ryu.base import app_manager

from ryu.controller import ofp_event

from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER

from ryu.controller.handler import set_ev_cls

from ryu.ofproto import ofproto_v1_3

from ryu.ofproto import ofproto_v1_3_parser

from ryu.lib.packet import packet

from ryu.lib.packet import ethernet,arp,ipv4

from ryu.lib.packet import ether_types

from ryu.lib.packet import ipv4

from ryu.topology import switches

from ryu.topology.event import EventSwitchEnter, EventSwitchLeave

mac2port = { "00:00:00:00:00:01":1,

"00:00:00:00:00:02":2,

"00:00:00:00:00:03":3,

}

class SimpleSwitch13(app_manager.RyuApp):

OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]

def __init__(self, *args, **kwargs):

super(SimpleSwitch13, self).__init__(*args, **kwargs)

self.mac_to_port = {}

@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

table_id = 0

match = parser.OFPMatch()

actions = [parser.OFPActionOutput(ofproto.OFPP_CONTROLLER,

ofproto.OFPCML_NO_BUFFER)]

self.add_flow(datapath, table_id, 0, match, actions)

def add_flow(self, datapath, table_id ,priority, match, actions, buffer_id=None):

ofproto = datapath.ofproto

parser = datapath.ofproto_parser

inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions)]

if buffer_id:

mod = parser.OFPFlowMod(datapath=datapath, table_id = table_id, command=ofproto.OFPFC_ADD, buffer_id=buffer_id,

priority=priority, match=match, instructions=inst)

else:

mod = parser.OFPFlowMod(datapath=datapath, table_id = table_id, command=ofproto.OFPFC_ADD, priority=priority,

match=match, instructions=inst)

datapath.send_msg(mod)

def init_flow(self, datapath, table_id, priority, match, inst):

"""Create OFP flow mod message."""

ofproto = datapath.ofproto

out  = datapath.ofproto_parser.OFPFlowMod(datapath=datapath,

table_id=table_id,

command=ofproto.OFPFC_ADD,

priority=priority,

match=match,

instructions=inst)

datapath.send_msg(out)

@set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)

def _packet_in_handler(self, ev):

# If you hit this you might want to increase

# the "miss_send_length" of your switch

if ev.msg.msg_len

self.logger.debug("packet truncated: only %s of %s bytes",

ev.msg.msg_len, ev.msg.total_len)

msg = ev.msg

datapath = msg.datapath

ofproto = datapath.ofproto

parser = datapath.ofproto_parser

in_port = msg.match['in_port']

pkt = packet.Packet(msg.data)

eth = pkt.get_protocols(ethernet.ethernet)[0]

dst_mac = eth.dst

src_mac = eth.src

dpid = datapath.id

print eth.ethertype

self.logger.info("packet in %s %s %s %s", dpid, src_mac, dst_mac, in_port)

if eth.ethertype == ether_types.ETH_TYPE_ARP:

dst_ip = pkt.get_protocol(arp.arp).dst_ip

src_ip = pkt.get_protocol(arp.arp).src_ip

out_port = ofproto.OFPP_FLOOD

table_id =  0

match = parser.OFPMatch(eth_type=0x0806)

actions =[parser.OFPActionOutput(out_port)]

inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions)]

self.init_flow(datapath, table_id, 100, match, inst)

if eth.ethertype == ether_types.ETH_TYPE_IP:

out_port = mac2port[dst_mac]

table_id = 0

match = parser.OFPMatch(eth_type=0x0800,eth_dst = dst_mac)

actions =[parser.OFPActionOutput(out_port)]

inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,actions)]

self.init_flow(datapath, table_id, 10, match, inst)

openflow交换机 ryu_openflow的初步认识及RYU控制器实践相关推荐

  1. ryu和mysql实现控制_openflow的初步认识及RYU控制器实践

    拓扑图如下: 无控制器下的openflow流表下发演示 创建一个交换机,3台主机,无控制器,流表手工下发: # mn --topo single,3 --controller=none --mac m ...

  2. openflow交换机 ryu_在RYU中实现交换机的功能

    首先源码,解析部分如下,同时可以参考RYU_BOOK上的解释说明 原文链接参考:https://blog.csdn.net/qq_34099967/article/details/89047741 f ...

  3. openflow交换机 ryu_ryu(示例代码)

    controller目录下的ofo_event.py定义了OpenFlow事件,handler.py定义了事件的处理 from ryu.baseimport app_managerfromryu.co ...

  4. SDN(二) 对TP-LINK TL-MR3420型号的OpenFlow交换机进行配置

    1 引言 积跬步以至千里,积怠情以至深渊. 在本人博客SDN(一)中已经详细介绍了如何将TP-LINK TL-MR3420路由器刷成OpenFlow交换机,该无线路由器已具备支持SDN功能.本文将继续 ...

  5. ubuntu 14.04设备OVS虚拟OpenFlow交换机配置汇总

    一.设备OVS sudo apt-get install openvswitch-controller openvswitch-switch openvswitch-datapath-source ( ...

  6. OpenFlow交换机 之 OpenFlow协议

    转载地址:3. OpenFlow协议_SDN核心技术剖析和实战指南_红黑联盟读书频道http://book.2cto.com/201310/34138.html OpenFlow协议是用来描述控制器和 ...

  7. OpenFlow交换机【ACM SIGCOMM顶会论文笔记】

    目录 写在前面的话 OpenFlow交换机 基本思想与工作原理 专用OpenFlow交换机(Dedicated OpenFlow switches) 启用OpenFlow的交换机(OpenFlow-e ...

  8. OpenFlow交换机概述

    1 交换机组成 OpenFlow交换机包括一个或多个流表和一个组表,执行分组查找和转发,和到一个外部控制器OpenFlow的信道. 控制器使用OpenFlow的协议,可添加.更新和删除流表中表项,既主 ...

  9. openflow交换机 ryu_关于OpenFlow协议

    SDN中两个重要元素:控制器(掌控全局,指挥网络内的设备工作) 交换机(转发数据) 控制器与网络设备通过OpenFlow协议进行通信 OpenFlow交换机内有一个FlowTable,交换机按照流表转 ...

最新文章

  1. 深入探索边缘计算:物联网与5G时代的技术趋势
  2. 三十天学不会TCP,UDP/IP网络编程 - RST的用法
  3. python写入中文、用utf-16编码得出二进制字节串_在python中将unicode UTF16数据写入文件时出现问题...
  4. Struts2中action接受参数方法
  5. [iOS] Win8下在Vmware11中安装使用苹果系统OS X 10.10
  6. 电影院里为何有散落的青瓜?
  7. 外设驱动库开发笔记10:SHT2x系列温湿度传感器驱动
  8. [转][进阶]-Python3 异步编程详解
  9. select count mysql_mysql select count 与 select count 两个执行效率怎样
  10. 关于SVN限制填写备注和自动更新代码到网站的研究
  11. yuki翻译器钩子_最新YUKI GALGAME翻译器下载地址电脑版-CC软件
  12. 服装尺寸 html,服装尺寸对照表_衣服尺码:M、L、XL、XXL、XXXL 分别代表什么尺码...
  13. 可伸缩性, 可用性和稳定性模式 Scalability, Availability Stability Patterns
  14. 北京苹果店正门logo熄灯悼念 果粉献花纪哀思
  15. 思科员工离职恶意删除456个虚拟机,造成240w美元直接损失,或面临5年有期徒刑
  16. EDK2环境的搭建以及遇到的部分问题解答
  17. Material studio切胞操作
  18. 网络黑道常用之拼音缩写用语前十名
  19. txt转换epub如何转?你将在这篇文章里找到答案
  20. python中pyecharts绘制地图

热门文章

  1. 【FPGA算法加速】运行PYNQ,对应FPGA芯片版本:赛灵思黑金AX7020
  2. MVC, MVP 与 MVVM
  3. 入门SpringBoot-关于那些静态资源(四)
  4. 入门C语言第二话:函数(上)之锻体篇,带你玩转函数(内有汉诺塔,青蛙跳台阶等经典问题,建议收藏和分享)
  5. 通信之自相关、互相关函数
  6. “互联网+”时代下的服装企业管理
  7. oracle数据库的blob和clob类型,是什么意思和区别
  8. 《刨根问底系列》01:操作系统凭什么可以调度程序?
  9. 运用highcharts绘制饼图
  10. Win7系统不识别DVD光驱是怎么回事