SDN中ryu应用写法结构介绍
咱们在开发SDN应用时候是不是经常遇到这样结构,两种写法都行,重点看一下远程控制器SDNAPP类中_packet_in_handler和switch_features_handler函数就行,_packet_in_handler主要处理数据包进入事件,解析多种协议并转发或丢弃等等,在这个函数中我们还可以存储解析的协议到内存或者数据库中,安全方面咱们可以自定义rules根据规则来判断是否拦截数据包,除了常规的开发以外人工智能咱们可以采集流量并对接AI识别都行。其他函数如switch_features_handler交换机事件,处理交换机连接事件,安装默认流表,当有新的交换机连接到系统时,会自动触发这个功能。其他函数等后期咱们在逐一添加,咱们接下来就开始不定期的编写不同SDN国内外国网络挑战比赛Demo项目
class SDNApp(app_manager.RyuApp):
def __init__(self, *args, **kwargs):
super(SDNIntelligentApp, self).__init__(*args, **kwargs)
###########################################################################
# 核心转发与路径计算功能
###########################################################################
@set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
def _packet_in_handler(self, ev):
"""处理数据包进入事件,解析多种协议并转发或丢弃,存储内存,数据库,采集对接AI都行"""
ip = eth
src_ip
dec_ip
src_port
dec_port
pass
###########################################################################
# 新增:处理交换机连接事件,安装默认流表
#当有新的交换机连接到系统时,会自动触发这个功能。它会给这个新交换机设置一个 "默认规则",
#简单说就是让所有经过这个交换机的数据包,都先送到控制器那里去处理,而不是自己直接转发。
###########################################################################
@set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
def switch_features_handler(self, ev):
"""交换机连接时安装默认流表,将所有数据包发送到控制器"""
pass
class SDNSecuritySystem:
"""基于SDN系统核心逻辑"""
def __init__(self, controller):
# 保存控制器引用
self.controller = controller
class SDNAPP():
def __init__(self, *args, **kwargs):
# 初始化安全系统核心组件
self.security_system = SDNSecuritySystem(self)
@set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
def _packet_in_handler(self, ev):
"""处理数据包进入事件,解析多种协议并转发或丢弃,存储内存,数据库,采集对接AI都行"""
ip = eth
src_ip
dec_ip
src_port
dec_port
pass
@set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
def switch_features_handler(self, ev):
"""交换机连接时安装默认流表,将所有数据包发送到控制器"""
pass