diff options
author | fumihiko kakuma <kakuma@valinux.co.jp> | 2014-02-07 16:36:17 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2014-02-07 19:53:53 +0900 |
commit | a5e369390848282c681b6e89b87865c1e3ead4ae (patch) | |
tree | 16980a4ef5202907116255d062190c713d34e63a | |
parent | d00d1498d7adedb35df5c58575b583a5dad76f14 (diff) |
neutron-ofswitch-agent: neutron agent for ofswitch ML2 mechanism driver
Like ryu-manager, this agent serves Ryu applications and acts an OpenFlow
controller to control switches. The neutron agent logic, which we will
push to the neutron repo, is implemented as a Ryu application.
Implements: OpenStack blueprint ryu-ml2-driver
https://blueprints.launchpad.net/neutron/+spec/ryu-ml2-driver
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rwxr-xr-x | bin/neutron-ofswitch-agent | 19 | ||||
-rwxr-xr-x | ryu/cmd/ofs_neutron_agent.py | 88 |
2 files changed, 107 insertions, 0 deletions
diff --git a/bin/neutron-ofswitch-agent b/bin/neutron-ofswitch-agent new file mode 100755 index 00000000..2778b220 --- /dev/null +++ b/bin/neutron-ofswitch-agent @@ -0,0 +1,19 @@ +#!/usr/bin/env python + +# Copyright (C) 2011, 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ryu.cmd.ofs_neutron_agent import main +main() diff --git a/ryu/cmd/ofs_neutron_agent.py b/ryu/cmd/ofs_neutron_agent.py new file mode 100755 index 00000000..b38fefed --- /dev/null +++ b/ryu/cmd/ofs_neutron_agent.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python +# +# Copyright (C) 2014 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2014 VA Linux Systems Japan K.K. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# @author: Fumihiko Kakuma, VA Linux Systems Japan K.K. + +from ryu.lib import hub +hub.patch() + +# TODO: +# Right now, we have our own patched copy of ovs python bindings +# Once our modification is upstreamed and widely deployed, +# use it +# +# NOTE: this modifies sys.path and thus affects the following imports. +# eg. oslo.config.cfg. +import ryu.contrib + +from oslo.config import cfg +import sys + +from neutron.openstack.common import log as os_logging +from neutron.common import config as osn_config + +from ryu import flags +from ryu import version +from ryu.app import wsgi +from ryu.base.app_manager import AppManager +from ryu.controller import controller +from ryu.topology import switches + + +LOG = os_logging.getLogger(__name__) +CONF = cfg.CONF +CONF.register_cli_opts([ + cfg.ListOpt('app-lists', default=[], + help='application module name to run'), + cfg.MultiStrOpt('app', positional=True, default=[], + help='application module name to run') +]) + + +def main(): + try: + CONF(project='ryu', version='ofs_neutron_agent %s' % version, + default_config_files=['/usr/local/etc/ryu/ryu.conf']) + except cfg.ConfigFilesNotFoundError: + CONF(project='ryu', version='ofs_neutron_agent %s' % version) + + osn_config.setup_logging(CONF) + + app_lists = CONF.app_lists + CONF.app + if not app_lists: + app_lists = ['ryu.app.ofctl.service', + 'neutron.plugins.ofswitch.agent.ofs_neutron_agent'] + + 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) + finally: + app_mgr.close() + + +if __name__ == "__main__": + main() |