From: fumihiko kakuma <[email protected]>

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 <[email protected]>
---
 bin/neutron-ofswitch-agent   | 19 ++++++++++
 ryu/cmd/ofs_neutron_agent.py | 88 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 107 insertions(+)
 create mode 100755 bin/neutron-ofswitch-agent
 create mode 100755 ryu/cmd/ofs_neutron_agent.py

diff --git a/bin/neutron-ofswitch-agent b/bin/neutron-ofswitch-agent
new file mode 100755
index 0000000..2778b22
--- /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 0000000..b38fefe
--- /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()
-- 
1.8.3.1


------------------------------------------------------------------------------
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to