Signed-off-by: YAMAMOTO Takashi <[email protected]>
---
doc/source/app.rst | 12 ++++++++++++
doc/source/app/ofctl.rst | 30 ++++++++++++++++++++++++++++++
doc/source/index.rst | 1 +
ryu/app/ofctl/api.py | 29 ++++++++++++++++++++++++++++-
ryu/app/ofctl/exception.py | 4 ++++
5 files changed, 75 insertions(+), 1 deletion(-)
create mode 100644 doc/source/app.rst
create mode 100644 doc/source/app/ofctl.rst
diff --git a/doc/source/app.rst b/doc/source/app.rst
new file mode 100644
index 0000000..c20b0bf
--- /dev/null
+++ b/doc/source/app.rst
@@ -0,0 +1,12 @@
+*************************
+Built-in Ryu applications
+*************************
+
+Ryu has some built-in Ryu applications.
+Some of them are examples.
+Others provide some functionalities to other Ryu applications.
+
+.. toctree::
+ :maxdepth: 1
+
+ app/ofctl.rst
diff --git a/doc/source/app/ofctl.rst b/doc/source/app/ofctl.rst
new file mode 100644
index 0000000..b293f34
--- /dev/null
+++ b/doc/source/app/ofctl.rst
@@ -0,0 +1,30 @@
+*************
+ryu.app.ofctl
+*************
+
+ryu.app.ofctl provides a convenient way to use OpenFlow messages
+synchronously.
+
+OfctlService ryu application is automatically loaded if your
+Ryu application imports ofctl.api module.
+
+Example::
+
+ import ryu.app.ofctl.api
+
+OfctlService application internally uses OpenFlow barrier messages
+to ensure message boundaries. As OpenFlow messages are asynchronous
+and some of messages does not have any replies on success, barriers
+are necessary for correct error handling.
+
+api module
+==========
+
+.. automodule:: ryu.app.ofctl.api
+ :members:
+
+exceptions
+==========
+
+.. automodule:: ryu.app.ofctl.exception
+ :members:
diff --git a/doc/source/index.rst b/doc/source/index.rst
index c9a0cb4..cfe256b 100644
--- a/doc/source/index.rst
+++ b/doc/source/index.rst
@@ -17,6 +17,7 @@ Contents:
configuration.rst
tests.rst
using_with_openstack.rst
+ app.rst
Indices and tables
==================
diff --git a/ryu/app/ofctl/api.py b/ryu/app/ofctl/api.py
index 64f06f0..8a62125 100644
--- a/ryu/app/ofctl/api.py
+++ b/ryu/app/ofctl/api.py
@@ -23,6 +23,10 @@ import event
def get_datapath(app, dpid):
"""
Get datapath object by dpid.
+
+ :param app: Client RyuApp instance
+ :param dpid: Datapath-id (in integer)
+
Returns None on error.
"""
assert isinstance(dpid, (int, long))
@@ -31,7 +35,30 @@ def get_datapath(app, dpid):
def send_msg(app, msg, reply_cls=None, reply_multi=False):
"""
- Send an openflow message.
+ Send an OpenFlow message and wait for reply messages.
+
+ :param app: Client RyuApp instance
+ :param msg: An OpenFlow controller-to-switch message to send
+ :param reply_cls: OpenFlow message class for expected replies.
+ None means no replies are expected. The default is None.
+ :param reply_multi: True if multipart replies are expected.
+ The default is False.
+
+ If no replies, returns None.
+ If reply_multi=False, returns OpenFlow switch-to-controller message.
+ If reply_multi=True, returns a list of OpenFlow switch-to-controller
+ messages.
+
+ Raise an exception on error.
+
+ Example::
+
+ import ryu.app.ofctl.api as api
+
+ msg = parser.OFPPortDescStatsRequest(datapath=datapath)
+ result = api.send_msg(self, msg,
+ reply_cls=parser.OFPPortDescStatsReply,
+ reply_multi=True)
"""
return app.send_request(event.SendMsgRequest(msg=msg,
reply_cls=reply_cls,
diff --git a/ryu/app/ofctl/exception.py b/ryu/app/ofctl/exception.py
index c49f33f..0155748 100644
--- a/ryu/app/ofctl/exception.py
+++ b/ryu/app/ofctl/exception.py
@@ -26,8 +26,12 @@ class _ExceptionBase(exception.RyuException):
class UnexpectedMultiReply(_ExceptionBase):
+ """Two or more replies are received for reply_muiti=False request."""
+
message = 'Unexpected Multi replies %(result)s'
class OFError(_ExceptionBase):
+ """OFPErrorMsg is received."""
+
message = 'OpenFlow errors %(result)s'
--
1.8.3.1
------------------------------------------------------------------------------
HPCC Systems Open Source Big Data Platform from LexisNexis Risk Solutions
Find What Matters Most in Your Big Data with HPCC Systems
Open Source. Fast. Scalable. Simple. Ideal for Dirty Data.
Leverages Graph Analysis for Fast Processing & Easy Data Exploration
http://p.sf.net/sfu/hpccsystems
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel