ONOS中控制器与交换机建立连接的过程

本文详细解析了ONOS控制器与交换机建立连接的三个阶段:启动监听6633端口,交换机连接控制器,以及版本协商。控制器通过启动监听端口等待交换机连接,并设置超时处理机制。交换机连接后,控制器进入等待HELLO消息的状态,接收到消息后进行版本协商,若协商失败则断开连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

控制器与交换机建立连接的过程主要分为三个阶段:控制器启动监听6633端口、交换机与控制器建立连接、控制器与交换机版本协商。
switch connection established

控制器启动监听6633端口

控制器启动的入口函数为

@Activate
OpenFlowControllerImpl.activate(Component context)

OSGI模块启动时候,就会调用这个函数,其中Activate注解说明了这一点:

The Activate annotation defines the method which is used to activate the component.

在OpenFlowControllerImpl类初始化的过程中,首先会实例化Controller和内部类OpenFlowSwitchAgent,OpenFlowSwitchAgent类十分重要,它用于跟踪已经建立连接的交换机以及它处于的状态。

private final Controller ctrl = new Controller();
protected OpenFlowSwitchAgent agent = new OpenFlowSwitchAgent();

然后启动控制器Controller.start(OpenFlowAgent agent),主要是配置参数,启动server端,监听端口,等待交换机建立连接。

public void run() {

    try {
        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);

        ChannelPipelineFactory pfact =
                new OpenflowPipelineFactory(this, null);
        bootstrap.setPipelineFactory(pfact);
        InetSocketAddress sa = new InetSocketAddress(openFlowPort);
        cg = new DefaultChannelGroup();
        cg.add(bootstrap.bind(sa));

        log.info("Listening for switch connections on {}", sa);
    } c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值