Ryu控制器实现hub功能

本文介绍了如何通过Ryu控制器实现Hub功能。在控制器端,需运行'ryu-manager hub.py --verbose'启动控制器,并显示详细信息。而在Mininet端,通过'sudo mn --controller=remote'命令指定远程控制器来设置网络。
摘要由CSDN通过智能技术生成
from ryu.base import app_manager
from ryu.ofproto import ofproto_v1_3
from ryu.controller import ofp_event
from ryu.controller.handler import MAIN_DISPATCHER,CONFIG_DISPATCHER
from ryu.controller.handler import set_ev_cls

class hub(app_manager.RyuApp):
	OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]

	def __init__(self,*args,**kwargs):
		super(hub,self).__init__(*args,**kwargs)

	@set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
	def switch_features_handler(self,ev):
		datapath = ev.msg.datapath
		ofproto  = datapath.ofproto
		ofp_parser = datapath.ofproto_parser

		match = ofp_parser.OFPMatch()

		actions = [ofp_parser.OFPActionOutput(ofproto.OFPP_CONTROLLER,
											  ofproto.OFPCML_NO_BUFFER)]
		self.add_flow(datapath,0,match,actions)


	def add_flow(self,datapath,priority,match,actions):
		# add a flow entry , and install it into datapath.
		ofproto = datapath.ofproto
		ofp_parser = datapath.ofproto_parser

		#confruct a flow_mod message and sent it
		inst = [ofp_parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS,
												actions)]
		mod = ofp_parser.OFPFlowMod(datapath=datapath,priority=priority,
									match=match,instructions=inst)
		datapath.send_msg(mod)

	@set_ev_cls(ofp_event.EventOFPPacketIn,MAIN_DISPATCHER)
	def packet_in_handler(self,ev):
		msg = ev.msg
		datapath = msg.datapath
		ofproto = datapath.ofproto
		ofp_parser = datapath.ofproto_parser
		in_port = msg.match['in_port']

		#construct a flow entry
		match = ofp_parser.OFPMatch()
		actions = [ofp_parser.OFPActionOutput(ofproto.OFPP_FLOOD)]

		#install flow_mod to avoid packet_in next time
		self.add_flow(datapath,1,match,actions)

		out = ofp_parser.OFPPacketOut(
			datapath=datapath,buffer_id=msg.buffer_id,in_port=in_port,actions=actions)
		datapath.send_msg(out)

执行命令:

ryu控制器端:到py文件目录下执行ryu-manager hub.py --verbose(verbose为显示详细资料)

mininet端:可以在任何路径下执行sudo mn --controller=remote(指定远端的控制器)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值