美文网首页
RYU代码分析-启动

RYU代码分析-启动

作者: guozhao | 来源:发表于2020-05-29 16:26 被阅读0次

    启动方式

    $ ryu-manager ofctl_rest.py simple_siwtch_13.py
    
    $ whereis ryu-manager
    ryu-manager: /usr/local/bin/ryu-manager
    

    $ vim /usr/local/bin/ryu-manager

    #!/usr/bin/python3
    # EASY-INSTALL-ENTRY-SCRIPT: 'ryu==4.32','console_scripts','ryu-manager'
    __requires__ = 'ryu==4.32'
    import sys
    from pkg_resources import load_entry_point
    
    if __name__ == '__main__':
        sys.exit(
            load_entry_point('ryu==4.32', 'console_scripts', 'ryu-manager')()
        )
    # 说明
    # load_entry_point 方法根据 ryu-4.3.2.dist-info/entry_points.txt 文件加载
    # ryu-manager 是 ryu.cmd.manager.py 中main方法的short name,
    # 所以最终执行的是 ryu.cmd.manager.py 的main方法
     
    
    图片.png

    ryu.cmd.manager.py 的 main方法

    
    def main(args=None, prog=None):
        # 解析 命令行 $ ryu-manager ofctl_rest.py simple_siwtch_13.py
        # 中的参数
        _parse_user_flags()   
    
        try:
            CONF(args=args, prog=prog,
                 project='ryu', version='ryu-manager %s' % version,
                # 配置文件的位置
                 default_config_files=['/usr/local/etc/ryu/ryu.conf'])  
        except cfg.ConfigFilesNotFoundError:
            CONF(args=args, prog=prog,
                 project='ryu', version='ryu-manager %s' % version)
    
        log.init_log()
        logger = logging.getLogger(__name__)
    
        if CONF.enable_debugger:
            msg = 'debugging is available (--enable-debugger option is turned on)'
            logger.info(msg)
        else:
            hub.patch(thread=True)
    
        if CONF.pid_file:
            with open(CONF.pid_file, 'w') as pid_file:
                pid_file.write(str(os.getpid()))
    
        app_lists = CONF.app_lists + CONF.app
        # keep old behavior, run ofp if no application is specified.
        if not app_lists:
            app_lists = [
                'ryu.controller.ofp_handler',  # 默认必须加载的文件
               # 我们可以自己把需要加载的文件写在这里,
              # 这样启动里可以直接执行 python3  ryu.cmd.manager.py 
                '../app/simple_switch_13.py' 
            ]
    
        app_mgr = AppManager.get_instance()
        app_mgr.load_apps(app_lists)
        contexts = app_mgr.create_contexts()
        services = []
        services.extend(app_mgr.instantiate_apps(**contexts))
    
        webapp = wsgi.start_service(app_mgr)
        if webapp:
            thr = hub.spawn(webapp)
            services.append(thr)
    
        try:
            hub.joinall(services)
        except KeyboardInterrupt:
            logger.debug("Keyboard Interrupt received. "
                         "Closing RYU application manager...")
        finally:
            app_mgr.close()
    

    相关文章

      网友评论

          本文标题:RYU代码分析-启动

          本文链接:https://www.haomeiwen.com/subject/tgffzhtx.html