美文网首页
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