summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorfumihiko kakuma <kakuma@valinux.co.jp>2014-02-07 16:36:17 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2014-02-07 19:53:53 +0900
commita5e369390848282c681b6e89b87865c1e3ead4ae (patch)
tree16980a4ef5202907116255d062190c713d34e63a
parentd00d1498d7adedb35df5c58575b583a5dad76f14 (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-xbin/neutron-ofswitch-agent19
-rwxr-xr-xryu/cmd/ofs_neutron_agent.py88
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()