SDN启蒙(2):Floodlight 启动及下发流表流程分析

本文深入分析了Floodlight SDN控制器的启动流程,包括加载模块、启动REST服务和Controller运行。核心在于OpenflowPipelineFactory设置的ChannelPipeline,处理来自交换机的消息。当交换机加入时,Floodlight通过HELLO消息确认其准备就绪,并将其加入activeSwitches。交换机的更新信息采用生产消费者模型,通过BlockingQueue传递给Controller处理,实现拓扑更新。链路发现模块关注PACKET_IN和PORT_STATUS消息,用于链路状态变更。Forwarding模块负责根据拓扑计算路径并下发流表。
摘要由CSDN通过智能技术生成

1 在Main中先是加载模块,启动REST服务,而后构建一个实现了IFloodlightProviderService接口的实例(即Controller)并运行,进入Controller的run()方法;
位置:net.floodlightcontroller.core.Main.java ;
功能:初始化IFloodlightModuleContext变量,启动Controller和RESTApi Service

2  位置:net.floodlightcontroller.core.internal.Controller.java
  Run()方法启动Controller,监听Switch的请求和将监听事前发送给各个监听模块。
此时所有的环境初始化工作已经完成,构建一个基于netty的TCP server,最重要的是流水线factory OpenflowPipelineFactory 的设置,里面是controller上流,下流处理的handler。
Floodlight 使用的是Netty架构,在Controller.java 入口函数中显示创建ServerBootstrap:

 //使用到了JBoss 的Netty框架  
  //创建Netty的服务端ServerBootstrap       
 final ServerBootstrap bootstrap = createServerBootStrap();  
            bootstrap.setOption("reuseAddr", true);            
           bootstrap.setOption("child.keepAlive", true);           
           bootstrap.setOption("child.tcpNoDelay", true);          
           bootstrap.setOption("child.sendBufferSize",Controller.SEND_BUFFER_SIZE);  
//创建处理Switch连接的工厂 
            ChannelPipelineFactory pfact = 
                    new OpenflowPipelineFactory(this, null); 
//设置服务端处理连接的工厂 
            bootstrap.setPipelineFactory(pfact);         
            InetSocketAddress sa =   (openFlowHost == null)  ? new InetSocketAddress(openFlowPort)      
                 : new InetSocketAddress(openFlowHost, openFlowPort); 
//将服务端加入线程池 
            final ChannelGroup cg = new DefaultChannelGroup();             cg.add(bootstrap.bind(sa));  
            log.info("Listening for switch connections on {}", sa);

 设置套接字选项ChannelPipeline,此时监听套接字就准备好处理来自SW的各种消息;这里最核心的就是 OpenflowPipelineFactory ,会加入各个业务相关的Handler,ChannelPipeline工厂代码如下:
 

 public ChannelPipeline getPipeline() 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值