os_ken.app.ofctl¶
os_ken.app.ofctl provides a convenient way to use OpenFlow messages synchronously.
OfctlService os_ken application is automatically loaded if your OS-Ken application imports ofctl.api module.
Example:
import os_ken.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¶
- os_ken.app.ofctl.api.get_datapath(app, dpid=None)¶
Get datapath object by dpid.
- Parameters
app -- Client OSKenApp instance
dpid -- Datapath ID (int type) or None to get all datapath objects
Returns a object of datapath, a list of datapath objects when no dpid given or None when error.
Raises an exception if any of the given values is invalid.
Example:
# ...(snip)... import os_ken.app.ofctl.api as ofctl_api class MyApp(app_manager.OSKenApp): def _my_handler(self, ev): # Get all datapath objects result = ofctl_api.get_datapath(self) # Get the datapath object which has the given dpid result = ofctl_api.get_datapath(self, dpid=1)
- os_ken.app.ofctl.api.send_msg(app, msg, reply_cls=None, reply_multi=False)¶
Send an OpenFlow message and wait for reply messages.
- Parameters
app -- Client OSKenApp instance
msg -- An OpenFlow controller-to-switch message to send
reply_cls -- OpenFlow message class for expected replies. None means no replies are expected. The default is None.
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:
# ...(snip)... import os_ken.app.ofctl.api as ofctl_api class MyApp(app_manager.OSKenApp): def _my_handler(self, ev): # ...(snip)... msg = parser.OFPPortDescStatsRequest(datapath=datapath) result = ofctl_api.send_msg( self, msg, reply_cls=parser.OFPPortDescStatsReply, reply_multi=True)
exceptions¶
- exception os_ken.app.ofctl.exception.InvalidDatapath(result)¶
Datapath is invalid.
This can happen when the bridge disconnects.
- exception os_ken.app.ofctl.exception.OFError(result)¶
OFPErrorMsg is received.
- exception os_ken.app.ofctl.exception.UnexpectedMultiReply(result)¶
Two or more replies are received for reply_muiti=False request.