Discussion:
[Ryu-devel] Adding REST to Ryu
Douglas Harewood-Gill
2017-06-06 12:18:25 UTC
Permalink
Greetings I am a PhD student new to both Python and Ryu and I was
wondering if anyone could give me some advice.


I am using the Ryu controller program (L2DestForwardStaticRyu.py) provided
by Dr Grey Bernstein (
https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu)
for shortest path computation for a full Mesh network in Mininet but the
example provided does not include REST which I require to be able to
collect flow statistics such as the flows in each router, bandwidth,
latency, etc.


Unfortunately I have been looking and with the exception of (
https://osrg.github.io/ryu-book/en/html/rest_api.html) which seems overly
specific, I am unable to find a good example that would allow me to work
out how to integrate REST into the above Ryu control program.

So if anyone can point me in the right direction or can provide some
examples, I would be most grateful.


Thank you for your time.


Best Regards


Douglas
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
e-mail: douglas.harewood-***@bristol.ac.uk


*CDT Communications*

University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB

http://www.bristol.ac.uk/
Fujimoto Satoshi
2017-06-07 00:15:07 UTC
Permalink
Hi, Douglas

Ryu has ofctl_rest.py, which is a sample application and provides REST
API to get flow statistics.
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html

I think it is better to use ofctl_rest.py than to implement your own
REST API in your app.

Thanks,
Fujimoto
Post by Douglas Harewood-Gill
Greetings I am a PhD student new to both Python and Ryu and I was
wondering if anyone could give me some advice.
I am using the Ryu controller program (L2DestForwardStaticRyu.py)
provided by Dr Grey Bernstein
(https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu)
for shortest path computation for a full Mesh network in Mininet but
the example provided does not include REST which I require to be able
to collect flow statistics such as the flows in each router,
bandwidth, latency, etc.
Unfortunately I have been looking and with the exception of
(https://osrg.github.io/ryu-book/en/html/rest_api.html) which seems
overly specific, I am unable to find a good example that would allow
me to work out how to integrate REST into the above Ryu control program.
So if anyone can point me in the right direction or can provide some
examples, I would be most grateful.
Thank you for your time.
Best Regards
Douglas
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
Douglas Harewood-Gill
2017-06-07 11:21:58 UTC
Permalink
Hi there. That is fantastic. Sounds exactly like what I am looking for so
thank you.

One last question for the minute. I know you provided a link but how do you
implement this with custom Ryu controller code?

My apologies if I am asking something really obvious.

Cheers

Douglas
Post by Fujimoto Satoshi
Hi, Douglas
Ryu has ofctl_rest.py, which is a sample application and provides REST API
to get flow statistics.
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
I think it is better to use ofctl_rest.py than to implement your own REST
API in your app.
Thanks,
Fujimoto
Greetings I am a PhD student new to both Python and Ryu and I was
wondering if anyone could give me some advice.
I am using the Ryu controller program (L2DestForwardStaticRyu.py) provided
by Dr Grey Bernstein (https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu) for shortest path computation for a full
Mesh network in Mininet but the example provided does not include REST
which I require to be able to collect flow statistics such as the flows in
each router, bandwidth, latency, etc.
Unfortunately I have been looking and with the exception of (
https://osrg.github.io/ryu-book/en/html/rest_api.html) which seems overly
specific, I am unable to find a good example that would allow me to work
out how to integrate REST into the above Ryu control program.
So if anyone can point me in the right direction or can provide some
examples, I would be most grateful.
Thank you for your time.
Best Regards
Douglas
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
* CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
e-mail: douglas.harewood-***@bristol.ac.uk


*CDT Communications*

University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB

http://www.bristol.ac.uk/
Iwase Yusuke
2017-06-08 00:27:09 UTC
Permalink
Hi Douglas,

Excuse me for cutting in.

Just for getting flow statistics, how about running your app and ofctl_rest
together as Fujimoto said.
e.g.)
$ ryu-manager your_app.py ryu.app.ofctl_rest


If you want to implement your own REST APIs on your app, Ryu-Book is the
most helpful as far as I know.
(You might already be aware of this though...)
http://osrg.github.io/ryu-book/en/html/rest_api.html


FYI, here is an sample implementation on simple_switch_13.py for getting
flow statistics.
The usage of "WSGI" framework is described on Ryu-Book.


$ git diff
diff --git a/ryu/app/simple_switch_13.py b/ryu/app/simple_switch_13.py
index 3e7c598..f33e474 100644
--- a/ryu/app/simple_switch_13.py
+++ b/ryu/app/simple_switch_13.py
@@ -13,6 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.

+import json
+
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER
@@ -21,14 +23,26 @@ from ryu.ofproto import ofproto_v1_3
from ryu.lib.packet import packet
from ryu.lib.packet import ethernet
from ryu.lib.packet import ether_types
+from ryu.app.ofctl import api as ofctl_api
+from ryu.app.wsgi import ControllerBase
+from ryu.app.wsgi import Response
+from ryu.app.wsgi import route
+from ryu.app.wsgi import WSGIApplication
+
+
+_URI_PREFIX = '/simpleswitch/stats/{dpid}'


class SimpleSwitch13(app_manager.RyuApp):
OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
+ _CONTEXTS = {'wsgi': WSGIApplication}

def __init__(self, *args, **kwargs):
super(SimpleSwitch13, self).__init__(*args, **kwargs)
self.mac_to_port = {}
+ wsgi = kwargs['wsgi']
+ wsgi.register(SimpleSwitchController,
+ {SimpleSwitch13.__name__: self})

@set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
def switch_features_handler(self, ev):
@@ -117,3 +131,32 @@ class SimpleSwitch13(app_manager.RyuApp):
out = parser.OFPPacketOut(datapath=datapath, buffer_id=msg.buffer_id,
in_port=in_port, actions=actions, data=data)
datapath.send_msg(out)
+
+ def get_flow_stats(self, dpid):
+ datapath = ofctl_api.get_datapath(self, dpid)
+ if datapath is None:
+ return None
+
+ parser = datapath.ofproto_parser
+ req = parser.OFPFlowStatsRequest(datapath)
+
+ rep = ofctl_api.send_msg(
+ app=self, msg=req,
+ reply_cls=parser.OFPFlowStatsReply, reply_multi=True)
+ return [r.to_jsondict() for r in rep]
+
+
+class SimpleSwitchController(ControllerBase):
+
+ def __init__(self, req, link, data, **config):
+ super(SimpleSwitchController, self).__init__(req, link, data, **config)
+ self.simple_switch_app = data[SimpleSwitch13.__name__]
+
+ @route('simpleswitch', _URI_PREFIX, methods=['GET'])
+ def list_mac_table(self, req, **kwargs):
+ dpid = int(str(kwargs['dpid']))
+ ret = self.simple_switch_app.get_flow_stats(dpid)
+ if ret is None:
+ return Response(status=404)
+
+ return Response(content_type='application/json', body=json.dumps(ret))


$ ryu-manager ryu/app/simple_switch_13.py
Registered VCS backend: git
Registered VCS backend: hg
Registered VCS backend: svn
Registered VCS backend: bzr
loading app ryu/app/simple_switch_13.py
loading app ryu.controller.ofp_handler
loading app ryu.app.ofctl.service
loading app ryu.controller.ofp_handler
creating context wsgi
instantiating app ryu.app.ofctl.service of OfctlService
instantiating app ryu/app/simple_switch_13.py of SimpleSwitch13
instantiating app ryu.controller.ofp_handler of OFPHandler
(10332) wsgi starting up on http://0.0.0.0:8080
...


$ curl -X GET http://localhost:8080/simpleswitch/stats/1 | python -m json.tool
[
{
"OFPFlowStatsReply": {
"body": [
{
"OFPFlowStats": {
"byte_count": 140,
"cookie": 0,
"duration_nsec": 771000000,
"duration_sec": 1,
"flags": 0,
"hard_timeout": 0,
"idle_timeout": 0,
"instructions": [
{
"OFPInstructionActions": {
"actions": [
{
"OFPActionOutput": {
"len": 16,
"max_len": 65535,
"port": 4294967293,
"type": 0
}
}
],
"len": 24,
"type": 4
}
}
],
"length": 80,
"match": {
"OFPMatch": {
"length": 4,
"oxm_fields": [],
"type": 1
}
},
"packet_count": 2,
"priority": 0,
"table_id": 0
}
}
],
"flags": 0,
"type": 1
}
}
]


Thanks,
Iwase
Hi there. That is fantastic. Sounds exactly like what I am looking for so thank you.
One last question for the minute. I know you provided a link but how do you implement this with custom Ryu controller code?
My apologies if I am asking something really obvious.
Cheers
Douglas
Hi, Douglas
Ryu has ofctl_rest.py, which is a sample application and provides REST API to get flow statistics.
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
I think it is better to use ofctl_rest.py than to implement your own REST API in your app.
Thanks,
Fujimoto
Greetings I am a PhD student new to both Python and Ryu and I was wondering if anyone could give me some advice.
I am using the Ryu controller program (L2DestForwardStaticRyu.py) provided by Dr Grey Bernstein (https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>) for shortest path computation for a full Mesh network in Mininet but the example provided does not include REST which I require to be able to collect flow statistics such as the flows in each router, bandwidth, latency, etc.
Unfortunately I have been looking and with the exception of (https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>) which seems overly specific, I am unable to find a good example that would allow me to work out how to integrate REST into the above Ryu control program.
So if anyone can point me in the right direction or can provide some examples, I would be most grateful.
Thank you for your time.
Best Regards
Douglas
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
Douglas Harewood-Gill
2017-06-09 12:00:36 UTC
Permalink
Hi Iwase. Thank you for contacting me and apologies for my delay in
responding. I have tried what you have suggested but the problem I have is
that the L2DestForwardStaticRyu.py program is designed to run on its own.
It imports the the ryu.cmd import manager and uses the Ryu controller but
you start it by typing "python l2DestForwardStaticRyu.py
--netfile=ExNetwithLoops1A.json" where it imports =ExNetWithLoops1A.Json.
When this program is started, it automatically loads Ryu and implements the
code within this program. I am not sure how to start the this and
ryu.app.ofctl_rest
at the same time. I have tried starting them separately in different
terminals but that did not work.

Thank you also for the information you have sent. I have looked at it
before but I do not know how to implement this with my custom code. I have
been looking for examples but they seem to be few and far between. Any
advice as always would be greatly appreciated.

Thanks again.

Douglas
Post by Iwase Yusuke
Hi Douglas,
Excuse me for cutting in.
Just for getting flow statistics, how about running your app and ofctl_rest
together as Fujimoto said.
e.g.)
$ ryu-manager your_app.py ryu.app.ofctl_rest
If you want to implement your own REST APIs on your app, Ryu-Book is the
most helpful as far as I know.
(You might already be aware of this though...)
http://osrg.github.io/ryu-book/en/html/rest_api.html
FYI, here is an sample implementation on simple_switch_13.py for getting
flow statistics.
The usage of "WSGI" framework is described on Ryu-Book.
$ git diff
diff --git a/ryu/app/simple_switch_13.py b/ryu/app/simple_switch_13.py
index 3e7c598..f33e474 100644
--- a/ryu/app/simple_switch_13.py
+++ b/ryu/app/simple_switch_13.py
@@ -13,6 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import json
+
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER
@@ -21,14 +23,26 @@ from ryu.ofproto import ofproto_v1_3
from ryu.lib.packet import packet
from ryu.lib.packet import ethernet
from ryu.lib.packet import ether_types
+from ryu.app.ofctl import api as ofctl_api
+from ryu.app.wsgi import ControllerBase
+from ryu.app.wsgi import Response
+from ryu.app.wsgi import route
+from ryu.app.wsgi import WSGIApplication
+
+
+_URI_PREFIX = '/simpleswitch/stats/{dpid}'
OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
+ _CONTEXTS = {'wsgi': WSGIApplication}
super(SimpleSwitch13, self).__init__(*args, **kwargs)
self.mac_to_port = {}
+ wsgi = kwargs['wsgi']
+ wsgi.register(SimpleSwitchController,
+ {SimpleSwitch13.__name__: self})
@set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
out = parser.OFPPacketOut(datapath=datapath,
buffer_id=msg.buffer_id,
in_port=in_port, actions=actions, data=data)
datapath.send_msg(out)
+
+ datapath = ofctl_api.get_datapath(self, dpid)
+ return None
+
+ parser = datapath.ofproto_parser
+ req = parser.OFPFlowStatsRequest(datapath)
+
+ rep = ofctl_api.send_msg(
+ app=self, msg=req,
+ reply_cls=parser.OFPFlowStatsReply, reply_multi=True)
+ return [r.to_jsondict() for r in rep]
+
+
+
+ super(SimpleSwitchController, self).__init__(req, link, data, **config)
+ self.simple_switch_app = data[SimpleSwitch13.__name__]
+
+ dpid = int(str(kwargs['dpid']))
+ ret = self.simple_switch_app.get_flow_stats(dpid)
+ return Response(status=404)
+
+ return Response(content_type='application/json',
body=json.dumps(ret))
$ ryu-manager ryu/app/simple_switch_13.py
Registered VCS backend: git
Registered VCS backend: hg
Registered VCS backend: svn
Registered VCS backend: bzr
loading app ryu/app/simple_switch_13.py
loading app ryu.controller.ofp_handler
loading app ryu.app.ofctl.service
loading app ryu.controller.ofp_handler
creating context wsgi
instantiating app ryu.app.ofctl.service of OfctlService
instantiating app ryu/app/simple_switch_13.py of SimpleSwitch13
instantiating app ryu.controller.ofp_handler of OFPHandler
(10332) wsgi starting up on http://0.0.0.0:8080
...
$ curl -X GET http://localhost:8080/simpleswitch/stats/1 | python -m json.tool
[
{
"OFPFlowStatsReply": {
"body": [
{
"OFPFlowStats": {
"byte_count": 140,
"cookie": 0,
"duration_nsec": 771000000,
"duration_sec": 1,
"flags": 0,
"hard_timeout": 0,
"idle_timeout": 0,
"instructions": [
{
"OFPInstructionActions": {
"actions": [
{
"OFPActionOutput": {
"len": 16,
"max_len": 65535,
"port": 4294967293,
"type": 0
}
}
],
"len": 24,
"type": 4
}
}
],
"length": 80,
"match": {
"OFPMatch": {
"length": 4,
"oxm_fields": [],
"type": 1
}
},
"packet_count": 2,
"priority": 0,
"table_id": 0
}
}
],
"flags": 0,
"type": 1
}
}
]
Thanks,
Iwase
Post by Douglas Harewood-Gill
Hi there. That is fantastic. Sounds exactly like what I am looking for
so thank you.
Post by Douglas Harewood-Gill
One last question for the minute. I know you provided a link but how do
you implement this with custom Ryu controller code?
Post by Douglas Harewood-Gill
My apologies if I am asking something really obvious.
Cheers
Douglas
Hi, Douglas
Ryu has ofctl_rest.py, which is a sample application and provides
REST API to get flow statistics.
Post by Douglas Harewood-Gill
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
Post by Douglas Harewood-Gill
I think it is better to use ofctl_rest.py than to implement your own
REST API in your app.
Post by Douglas Harewood-Gill
Thanks,
Fujimoto
Post by Douglas Harewood-Gill
Greetings I am a PhD student new to both Python and Ryu and I was
wondering if anyone could give me some advice.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I am using the Ryu controller program (L2DestForwardStaticRyu.py)
provided by Dr Grey Bernstein (https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu>) for shortest path computation for a full
Mesh network in Mininet but the example provided does not include REST
which I require to be able to collect flow statistics such as the flows in
each router, bandwidth, latency, etc.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Unfortunately I have been looking and with the exception of (
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>) which seems
overly specific, I am unable to find a good example that would allow me to
work out how to integrate REST into the above Ryu control program.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
So if anyone can point me in the right direction or can provide
some examples, I would be most grateful.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thank you for your time.
Best Regards
Douglas
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
sourceforge.net>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
e-mail: douglas.harewood-***@bristol.ac.uk


*CDT Communications*

University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB

http://www.bristol.ac.uk/
Iwase Yusuke
2017-06-13 01:17:07 UTC
Permalink
Hi Douglas,

I checked "L2DestForwardStaticRyu.py", and it seems to be "hacked" to run
app without "ryu-manager".
To start the built-in Ryu application with "L2DestForwardStaticRyu.py",
how about the following?
The following appends to "ofctl_rest" app to the argument of "manager".

e.g.) around line 91:

if __name__ == "__main__":
- manager.main(args=sys.argv)
+ manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])


Thanks,
Iwase
Hi Iwase. Thank you for contacting me and apologies for my delay in responding. I have tried what you have suggested but the problem I have is that the L2DestForwardStaticRyu.py program is designed to run on its own. It imports the the ryu.cmd import manager and uses the Ryu controller but you start it by typing "|python l2DestForwardStaticRyu.py --netfile=ExNetwithLoops1A.json" |where it imports =ExNetWithLoops1A.Json.
When this program is started, it automatically loads Ryu and implements the code within this program. I am not sure how to start the this and ryu.app.ofctl_rest at the same time. I have tried starting them separately in different terminals but that did not work.
Thank you also for the information you have sent. I have looked at it before but I do not know how to implement this with my custom code. I have been looking for examples but they seem to be few and far between. Any advice as always would be greatly appreciated.
Thanks again.
Douglas
Hi Douglas,
Excuse me for cutting in.
Just for getting flow statistics, how about running your app and ofctl_rest
together as Fujimoto said.
e.g.)
$ ryu-manager your_app.py ryu.app.ofctl_rest
If you want to implement your own REST APIs on your app, Ryu-Book is the
most helpful as far as I know.
(You might already be aware of this though...)
http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>
FYI, here is an sample implementation on simple_switch_13.py for getting
flow statistics.
The usage of "WSGI" framework is described on Ryu-Book.
$ git diff
diff --git a/ryu/app/simple_switch_13.py b/ryu/app/simple_switch_13.py
index 3e7c598..f33e474 100644
--- a/ryu/app/simple_switch_13.py
+++ b/ryu/app/simple_switch_13.py
@@ -13,6 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import json
+
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER
@@ -21,14 +23,26 @@ from ryu.ofproto import ofproto_v1_3
from ryu.lib.packet import packet
from ryu.lib.packet import ethernet
from ryu.lib.packet import ether_types
+from ryu.app.ofctl import api as ofctl_api
+from ryu.app.wsgi import ControllerBase
+from ryu.app.wsgi import Response
+from ryu.app.wsgi import route
+from ryu.app.wsgi import WSGIApplication
+
+
+_URI_PREFIX = '/simpleswitch/stats/{dpid}'
OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
+ _CONTEXTS = {'wsgi': WSGIApplication}
super(SimpleSwitch13, self).__init__(*args, **kwargs)
self.mac_to_port = {}
+ wsgi = kwargs['wsgi']
+ wsgi.register(SimpleSwitchController,
+ {SimpleSwitch13.__name__: self})
@set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
out = parser.OFPPacketOut(datapath=datapath, buffer_id=msg.buffer_id,
in_port=in_port, actions=actions, data=data)
datapath.send_msg(out)
+
+ datapath = ofctl_api.get_datapath(self, dpid)
+ return None
+
+ parser = datapath.ofproto_parser
+ req = parser.OFPFlowStatsRequest(datapath)
+
+ rep = ofctl_api.send_msg(
+ app=self, msg=req,
+ reply_cls=parser.OFPFlowStatsReply, reply_multi=True)
+ return [r.to_jsondict() for r in rep]
+
+
+
+ super(SimpleSwitchController, self).__init__(req, link, data, **config)
+ self.simple_switch_app = data[SimpleSwitch13.__name__]
+
+ dpid = int(str(kwargs['dpid']))
+ ret = self.simple_switch_app.get_flow_stats(dpid)
+ return Response(status=404)
+
+ return Response(content_type='application/json', body=json.dumps(ret))
$ ryu-manager ryu/app/simple_switch_13.py
Registered VCS backend: git
Registered VCS backend: hg
Registered VCS backend: svn
Registered VCS backend: bzr
loading app ryu/app/simple_switch_13.py
loading app ryu.controller.ofp_handler
loading app ryu.app.ofctl.service
loading app ryu.controller.ofp_handler
creating context wsgi
instantiating app ryu.app.ofctl.service of OfctlService
instantiating app ryu/app/simple_switch_13.py of SimpleSwitch13
instantiating app ryu.controller.ofp_handler of OFPHandler
(10332) wsgi starting up on http://0.0.0.0:8080
...
$ curl -X GET http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> | python -m json.tool
[
{
"OFPFlowStatsReply": {
"body": [
{
"OFPFlowStats": {
"byte_count": 140,
"cookie": 0,
"duration_nsec": 771000000,
"duration_sec": 1,
"flags": 0,
"hard_timeout": 0,
"idle_timeout": 0,
"instructions": [
{
"OFPInstructionActions": {
"actions": [
{
"OFPActionOutput": {
"len": 16,
"max_len": 65535,
"port": 4294967293,
"type": 0
}
}
],
"len": 24,
"type": 4
}
}
],
"length": 80,
"match": {
"OFPMatch": {
"length": 4,
"oxm_fields": [],
"type": 1
}
},
"packet_count": 2,
"priority": 0,
"table_id": 0
}
}
],
"flags": 0,
"type": 1
}
}
]
Thanks,
Iwase
Hi there. That is fantastic. Sounds exactly like what I am looking for so thank you.
One last question for the minute. I know you provided a link but how do you implement this with custom Ryu controller code?
My apologies if I am asking something really obvious.
Cheers
Douglas
Hi, Douglas
Ryu has ofctl_rest.py, which is a sample application and provides REST API to get flow statistics.
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
I think it is better to use ofctl_rest.py than to implement your own REST API in your app.
Thanks,
Fujimoto
Greetings I am a PhD student new to both Python and Ryu and I was wondering if anyone could give me some advice.
I am using the Ryu controller program (L2DestForwardStaticRyu.py) provided by Dr Grey Bernstein (https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>) for shortest path computation for a full Mesh network in Mininet but the example provided does not include REST which I require to be able to collect flow statistics such as the flows in each router, bandwidth, latency, etc.
Unfortunately I have been looking and with the exception of (https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>) which seems overly specific, I am unable to find a good example that would allow me to work out how to integrate REST into the above Ryu control program.
So if anyone can point me in the right direction or can provide some examples, I would be most grateful.
Thank you for your time.
Best Regards
Douglas
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
Douglas Harewood-Gill
2017-06-13 13:04:54 UTC
Permalink
Hi Iwase and thank you for getting back to me. The author of this program,
Dr Bernstein added this line "from ryu.cmd import manager" which as far as
I understand directly starts Ryu from within side
L2DestForwardStaticRyu.py. Should be around line 29 I think. He had to do
this he told me because he could not start the program in the conventional
way because he needed to import the "ExNetwithLoops!A.json file" for the
topology with static mac and IP addresses. Apparently he could not do this
just using the standard Ryu format of starting the Ryu Manager with the
Controller file and then with REST.

I tried your suggestion by removing "manager.main(args=sys.argv)"

from " if __name__ == "__main__": "

and using the following:-

"manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])" and I got the
following error message in the terminal.

"l2DestForwardStaticRyuNS: error: unrecognized arguments:
ryu.app.ofctl_rest"

Any advice would be welcome. I am obviously going to see what I can find
here and will let you know if I find anything relevant.

Cheers

Douglas
Post by Iwase Yusuke
Hi Douglas,
I checked "L2DestForwardStaticRyu.py", and it seems to be "hacked" to run
app without "ryu-manager".
To start the built-in Ryu application with "L2DestForwardStaticRyu.py",
how about the following?
The following appends to "ofctl_rest" app to the argument of "manager".
- manager.main(args=sys.argv)
+ manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])
Thanks,
Iwase
Post by Douglas Harewood-Gill
Hi Iwase. Thank you for contacting me and apologies for my delay in
responding. I have tried what you have suggested but the problem I have is
that the L2DestForwardStaticRyu.py program is designed to run on its own.
It imports the the ryu.cmd import manager and uses the Ryu controller but
you start it by typing "|python l2DestForwardStaticRyu.py
--netfile=ExNetwithLoops1A.json" |where it imports
=ExNetWithLoops1A.Json.
Post by Douglas Harewood-Gill
When this program is started, it automatically loads Ryu and implements
the code within this program. I am not sure how to start the this and
ryu.app.ofctl_rest at the same time. I have tried starting them separately
in different terminals but that did not work.
Post by Douglas Harewood-Gill
Thank you also for the information you have sent. I have looked at it
before but I do not know how to implement this with my custom code. I have
been looking for examples but they seem to be few and far between. Any
advice as always would be greatly appreciated.
Post by Douglas Harewood-Gill
Thanks again.
Douglas
Hi Douglas,
Excuse me for cutting in.
Just for getting flow statistics, how about running your app and
ofctl_rest
Post by Douglas Harewood-Gill
together as Fujimoto said.
e.g.)
$ ryu-manager your_app.py ryu.app.ofctl_rest
If you want to implement your own REST APIs on your app, Ryu-Book is
the
Post by Douglas Harewood-Gill
most helpful as far as I know.
(You might already be aware of this though...)
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>
Post by Douglas Harewood-Gill
FYI, here is an sample implementation on simple_switch_13.py for
getting
Post by Douglas Harewood-Gill
flow statistics.
The usage of "WSGI" framework is described on Ryu-Book.
$ git diff
diff --git a/ryu/app/simple_switch_13.py
b/ryu/app/simple_switch_13.py
Post by Douglas Harewood-Gill
index 3e7c598..f33e474 100644
--- a/ryu/app/simple_switch_13.py
+++ b/ryu/app/simple_switch_13.py
@@ -13,6 +13,8 @@
# See the License for the specific language governing permissions
and
Post by Douglas Harewood-Gill
# limitations under the License.
+import json
+
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import CONFIG_DISPATCHER,
MAIN_DISPATCHER
Post by Douglas Harewood-Gill
@@ -21,14 +23,26 @@ from ryu.ofproto import ofproto_v1_3
from ryu.lib.packet import packet
from ryu.lib.packet import ethernet
from ryu.lib.packet import ether_types
+from ryu.app.ofctl import api as ofctl_api
+from ryu.app.wsgi import ControllerBase
+from ryu.app.wsgi import Response
+from ryu.app.wsgi import route
+from ryu.app.wsgi import WSGIApplication
+
+
+_URI_PREFIX = '/simpleswitch/stats/{dpid}'
OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
+ _CONTEXTS = {'wsgi': WSGIApplication}
super(SimpleSwitch13, self).__init__(*args, **kwargs)
self.mac_to_port = {}
+ wsgi = kwargs['wsgi']
+ wsgi.register(SimpleSwitchController,
+ {SimpleSwitch13.__name__: self})
@set_ev_cls(ofp_event.EventOFPSwitchFeatures,
CONFIG_DISPATCHER)
Post by Douglas Harewood-Gill
out = parser.OFPPacketOut(datapath=datapath,
buffer_id=msg.buffer_id,
Post by Douglas Harewood-Gill
in_port=in_port, actions=actions,
data=data)
Post by Douglas Harewood-Gill
datapath.send_msg(out)
+
+ datapath = ofctl_api.get_datapath(self, dpid)
+ return None
+
+ parser = datapath.ofproto_parser
+ req = parser.OFPFlowStatsRequest(datapath)
+
+ rep = ofctl_api.send_msg(
+ app=self, msg=req,
+ reply_cls=parser.OFPFlowStatsReply, reply_multi=True)
+ return [r.to_jsondict() for r in rep]
+
+
+
+ super(SimpleSwitchController, self).__init__(req, link,
data, **config)
Post by Douglas Harewood-Gill
+ self.simple_switch_app = data[SimpleSwitch13.__name__]
+
+ dpid = int(str(kwargs['dpid']))
+ ret = self.simple_switch_app.get_flow_stats(dpid)
+ return Response(status=404)
+
+ return Response(content_type='application/json',
body=json.dumps(ret))
Post by Douglas Harewood-Gill
$ ryu-manager ryu/app/simple_switch_13.py
Registered VCS backend: git
Registered VCS backend: hg
Registered VCS backend: svn
Registered VCS backend: bzr
loading app ryu/app/simple_switch_13.py
loading app ryu.controller.ofp_handler
loading app ryu.app.ofctl.service
loading app ryu.controller.ofp_handler
creating context wsgi
instantiating app ryu.app.ofctl.service of OfctlService
instantiating app ryu/app/simple_switch_13.py of SimpleSwitch13
instantiating app ryu.controller.ofp_handler of OFPHandler
(10332) wsgi starting up on http://0.0.0.0:8080
...
$ curl -X GET http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1> | python -m json.tool
Post by Douglas Harewood-Gill
[
{
"OFPFlowStatsReply": {
"body": [
{
"OFPFlowStats": {
"byte_count": 140,
"cookie": 0,
"duration_nsec": 771000000,
"duration_sec": 1,
"flags": 0,
"hard_timeout": 0,
"idle_timeout": 0,
"instructions": [
{
"OFPInstructionActions": {
"actions": [
{
"OFPActionOutput": {
"len": 16,
"max_len": 65535,
"port": 4294967293,
"type": 0
}
}
],
"len": 24,
"type": 4
}
}
],
"length": 80,
"match": {
"OFPMatch": {
"length": 4,
"oxm_fields": [],
"type": 1
}
},
"packet_count": 2,
"priority": 0,
"table_id": 0
}
}
],
"flags": 0,
"type": 1
}
}
]
Thanks,
Iwase
Post by Douglas Harewood-Gill
Hi there. That is fantastic. Sounds exactly like what I am looking
for so thank you.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
One last question for the minute. I know you provided a link but
how do you implement this with custom Ryu controller code?
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
My apologies if I am asking something really obvious.
Cheers
Douglas
On 7 June 2017 at 01:15, Fujimoto Satoshi <
Hi, Douglas
Ryu has ofctl_rest.py, which is a sample application and
provides REST API to get flow statistics.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I think it is better to use ofctl_rest.py than to implement
your own REST API in your app.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thanks,
Fujimoto
Post by Douglas Harewood-Gill
Greetings I am a PhD student new to both Python and Ryu and
I was wondering if anyone could give me some advice.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I am using the Ryu controller program
(L2DestForwardStaticRyu.py) provided by Dr Grey Bernstein (
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>) for shortest
path computation for a full Mesh network in Mininet but the example
provided does not include REST which I require to be able to collect flow
statistics such as the flows in each router, bandwidth, latency, etc.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Unfortunately I have been looking and with the exception of (
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>) which seems
overly specific, I am unable to find a good example that would allow me to
work out how to integrate REST into the above Ryu control program.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
So if anyone can point me in the right direction or can
provide some examples, I would be most grateful.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thank you for your time.
Best Regards
Douglas
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland
Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's
most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland
Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
sourceforge.net>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
e-mail: douglas.harewood-***@bristol.ac.uk


*CDT Communications*

University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB

http://www.bristol.ac.uk/
Iwase Yusuke
2017-06-14 02:24:51 UTC
Permalink
Hi Douglas,

Hmmm... how about swapping the order of arguments?

e.g)
if __name__ == "__main__":
manager.main(args=['ryu.app.ofctl_rest'] + sys.argv)


FYI, I guess Dr.Bernstein did "hack"(used "ryu.cmd.manager" directly) in order to
add original CLI option like "--netfile" and "--widest_paths".
On the other hand, you can add your original CLI option as following.

$ git diff
diff --git a/ryu/flags.py b/ryu/flags.py
index 69eb3d2..ebf16c8 100644
--- a/ryu/flags.py
+++ b/ryu/flags.py
@@ -112,3 +112,10 @@ CONF.register_cli_opts([
help='Initial Router ID used by Zebra protocol service '
'(default: %s)' % DEFAULT_ZSERV_ROUTER_ID),
], group='zapi')
+
+CONF.register_cli_opts([
+ cfg.StrOpt(
+ 'netfile', default=None, help='network json file'),
+ cfg.BoolOpt(
+ 'widest_paths', default=False, help='Use widest path.'),
+])


Please note you need to re-install Ryu after the above modifications.

$ python setup.py install


Then, with this modification, you can run "l2DestForwardStaticRyu.py" as the
standard Ryu application via "ryu-manager":

$ ryu-manager --help
...(snip)...
--netfile NETFILE network json file
...(snip)...
--widest_paths Use widest path.
...(snip)...

$ ryu-manager l2DestForwardStaticRyu.py ryu.app.ofctl_rest --netfile=ExNetwithLoops1A.json --widest_paths


Thanks,
Iwase
Hi Iwase and thank you for getting back to me. The author of this program, Dr Bernstein added this line "from ryu.cmd import manager" which as far as I understand directly starts Ryu from within side L2DestForwardStaticRyu.py. Should be around line 29 I think. He had to do this he told me because he could not start the program in the conventional way because he needed to import the "ExNetwithLoops!A.json file" for the topology with static mac and IP addresses. Apparently he could not do this just using the standard Ryu format of starting the Ryu Manager with the Controller file and then with REST.
I tried your suggestion by removing "manager.main(args=sys.argv)"
from " if __name__ == "__main__": "
and using the following:-
"manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])" and I got the following error message in the terminal.
"l2DestForwardStaticRyuNS: error: unrecognized arguments: ryu.app.ofctl_rest"
Any advice would be welcome. I am obviously going to see what I can find here and will let you know if I find anything relevant.
Cheers
Douglas
Hi Douglas,
I checked "L2DestForwardStaticRyu.py", and it seems to be "hacked" to run
app without "ryu-manager".
To start the built-in Ryu application with "L2DestForwardStaticRyu.py",
how about the following?
The following appends to "ofctl_rest" app to the argument of "manager".
- manager.main(args=sys.argv)
+ manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])
Thanks,
Iwase
Hi Iwase. Thank you for contacting me and apologies for my delay in responding. I have tried what you have suggested but the problem I have is that the L2DestForwardStaticRyu.py program is designed to run on its own. It imports the the ryu.cmd import manager and uses the Ryu controller but you start it by typing "|python l2DestForwardStaticRyu.py --netfile=ExNetwithLoops1A.json" |where it imports =ExNetWithLoops1A.Json.
When this program is started, it automatically loads Ryu and implements the code within this program. I am not sure how to start the this and ryu.app.ofctl_rest at the same time. I have tried starting them separately in different terminals but that did not work.
Thank you also for the information you have sent. I have looked at it before but I do not know how to implement this with my custom code. I have been looking for examples but they seem to be few and far between. Any advice as always would be greatly appreciated.
Thanks again.
Douglas
Hi Douglas,
Excuse me for cutting in.
Just for getting flow statistics, how about running your app and ofctl_rest
together as Fujimoto said.
e.g.)
$ ryu-manager your_app.py ryu.app.ofctl_rest
If you want to implement your own REST APIs on your app, Ryu-Book is the
most helpful as far as I know.
(You might already be aware of this though...)
http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>>
FYI, here is an sample implementation on simple_switch_13.py for getting
flow statistics.
The usage of "WSGI" framework is described on Ryu-Book.
$ git diff
diff --git a/ryu/app/simple_switch_13.py b/ryu/app/simple_switch_13.py
index 3e7c598..f33e474 100644
--- a/ryu/app/simple_switch_13.py
+++ b/ryu/app/simple_switch_13.py
@@ -13,6 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import json
+
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER
@@ -21,14 +23,26 @@ from ryu.ofproto import ofproto_v1_3
from ryu.lib.packet import packet
from ryu.lib.packet import ethernet
from ryu.lib.packet import ether_types
+from ryu.app.ofctl import api as ofctl_api
+from ryu.app.wsgi import ControllerBase
+from ryu.app.wsgi import Response
+from ryu.app.wsgi import route
+from ryu.app.wsgi import WSGIApplication
+
+
+_URI_PREFIX = '/simpleswitch/stats/{dpid}'
OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
+ _CONTEXTS = {'wsgi': WSGIApplication}
super(SimpleSwitch13, self).__init__(*args, **kwargs)
self.mac_to_port = {}
+ wsgi = kwargs['wsgi']
+ wsgi.register(SimpleSwitchController,
+ {SimpleSwitch13.__name__: self})
@set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
out = parser.OFPPacketOut(datapath=datapath, buffer_id=msg.buffer_id,
in_port=in_port, actions=actions, data=data)
datapath.send_msg(out)
+
+ datapath = ofctl_api.get_datapath(self, dpid)
+ return None
+
+ parser = datapath.ofproto_parser
+ req = parser.OFPFlowStatsRequest(datapath)
+
+ rep = ofctl_api.send_msg(
+ app=self, msg=req,
+ reply_cls=parser.OFPFlowStatsReply, reply_multi=True)
+ return [r.to_jsondict() for r in rep]
+
+
+
+ super(SimpleSwitchController, self).__init__(req, link, data, **config)
+ self.simple_switch_app = data[SimpleSwitch13.__name__]
+
+ dpid = int(str(kwargs['dpid']))
+ ret = self.simple_switch_app.get_flow_stats(dpid)
+ return Response(status=404)
+
+ return Response(content_type='application/json', body=json.dumps(ret))
$ ryu-manager ryu/app/simple_switch_13.py
Registered VCS backend: git
Registered VCS backend: hg
Registered VCS backend: svn
Registered VCS backend: bzr
loading app ryu/app/simple_switch_13.py
loading app ryu.controller.ofp_handler
loading app ryu.app.ofctl.service
loading app ryu.controller.ofp_handler
creating context wsgi
instantiating app ryu.app.ofctl.service of OfctlService
instantiating app ryu/app/simple_switch_13.py of SimpleSwitch13
instantiating app ryu.controller.ofp_handler of OFPHandler
(10332) wsgi starting up on http://0.0.0.0:8080
...
$ curl -X GET http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> | python -m json.tool
[
{
"OFPFlowStatsReply": {
"body": [
{
"OFPFlowStats": {
"byte_count": 140,
"cookie": 0,
"duration_nsec": 771000000,
"duration_sec": 1,
"flags": 0,
"hard_timeout": 0,
"idle_timeout": 0,
"instructions": [
{
"OFPInstructionActions": {
"actions": [
{
"OFPActionOutput": {
"len": 16,
"max_len": 65535,
"port": 4294967293,
"type": 0
}
}
],
"len": 24,
"type": 4
}
}
],
"length": 80,
"match": {
"OFPMatch": {
"length": 4,
"oxm_fields": [],
"type": 1
}
},
"packet_count": 2,
"priority": 0,
"table_id": 0
}
}
],
"flags": 0,
"type": 1
}
}
]
Thanks,
Iwase
Hi there. That is fantastic. Sounds exactly like what I am looking for so thank you.
One last question for the minute. I know you provided a link but how do you implement this with custom Ryu controller code?
My apologies if I am asking something really obvious.
Cheers
Douglas
Hi, Douglas
Ryu has ofctl_rest.py, which is a sample application and provides REST API to get flow statistics.
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>
I think it is better to use ofctl_rest.py than to implement your own REST API in your app.
Thanks,
Fujimoto
Greetings I am a PhD student new to both Python and Ryu and I was wondering if anyone could give me some advice.
I am using the Ryu controller program (L2DestForwardStaticRyu.py) provided by Dr Grey Bernstein (https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>) for shortest path computation for a full Mesh network in Mininet but the example provided does not include REST which I require to be able to collect flow statistics such as the flows in each router, bandwidth, latency, etc.
Unfortunately I have been looking and with the exception of (https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>>) which seems overly specific, I am unable to find a good example that would allow me to work out how to integrate REST into the above Ryu control program.
So if anyone can point me in the right direction or can provide some examples, I would be most grateful.
Thank you for your time.
Best Regards
Douglas
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
Douglas Harewood-Gill
2017-06-14 12:41:44 UTC
Permalink
Hi Iwase. I did try it the other way but the error "AttributeError:
'module' object has not attribute "ofctl_rest" but it was worth trying so
thank you.

Regarding the instructions you sent me for altering Ryu, is there any
chance you could explain them a bit more please? I am having a little
trouble following them currently.

Thank you :)

Douglas
Post by Iwase Yusuke
Hi Douglas,
Hmmm... how about swapping the order of arguments?
e.g)
manager.main(args=['ryu.app.ofctl_rest'] + sys.argv)
FYI, I guess Dr.Bernstein did "hack"(used "ryu.cmd.manager" directly) in order to
add original CLI option like "--netfile" and "--widest_paths".
On the other hand, you can add your original CLI option as following.
$ git diff
diff --git a/ryu/flags.py b/ryu/flags.py
index 69eb3d2..ebf16c8 100644
--- a/ryu/flags.py
+++ b/ryu/flags.py
@@ -112,3 +112,10 @@ CONF.register_cli_opts([
help='Initial Router ID used by Zebra protocol service '
'(default: %s)' % DEFAULT_ZSERV_ROUTER_ID),
], group='zapi')
+
+CONF.register_cli_opts([
+ cfg.StrOpt(
+ 'netfile', default=None, help='network json file'),
+ cfg.BoolOpt(
+ 'widest_paths', default=False, help='Use widest path.'),
+])
Please note you need to re-install Ryu after the above modifications.
$ python setup.py install
Then, with this modification, you can run "l2DestForwardStaticRyu.py" as the
$ ryu-manager --help
...(snip)...
--netfile NETFILE network json file
...(snip)...
--widest_paths Use widest path.
...(snip)...
$ ryu-manager l2DestForwardStaticRyu.py ryu.app.ofctl_rest
--netfile=ExNetwithLoops1A.json --widest_paths
Thanks,
Iwase
Post by Douglas Harewood-Gill
Hi Iwase and thank you for getting back to me. The author of this
program, Dr Bernstein added this line "from ryu.cmd import manager" which
as far as I understand directly starts Ryu from within side
L2DestForwardStaticRyu.py. Should be around line 29 I think. He had to do
this he told me because he could not start the program in the conventional
way because he needed to import the "ExNetwithLoops!A.json file" for the
topology with static mac and IP addresses. Apparently he could not do this
just using the standard Ryu format of starting the Ryu Manager with the
Controller file and then with REST.
Post by Douglas Harewood-Gill
I tried your suggestion by removing "manager.main(args=sys.argv)"
from " if __name__ == "__main__": "
and using the following:-
"manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])" and I got the
following error message in the terminal.
ryu.app.ofctl_rest"
Post by Douglas Harewood-Gill
Any advice would be welcome. I am obviously going to see what I can find
here and will let you know if I find anything relevant.
Post by Douglas Harewood-Gill
Cheers
Douglas
Hi Douglas,
I checked "L2DestForwardStaticRyu.py", and it seems to be "hacked"
to run
Post by Douglas Harewood-Gill
app without "ryu-manager".
To start the built-in Ryu application with
"L2DestForwardStaticRyu.py",
Post by Douglas Harewood-Gill
how about the following?
The following appends to "ofctl_rest" app to the argument of
"manager".
Post by Douglas Harewood-Gill
- manager.main(args=sys.argv)
+ manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])
Thanks,
Iwase
Post by Douglas Harewood-Gill
Hi Iwase. Thank you for contacting me and apologies for my delay
in responding. I have tried what you have suggested but the problem I have
is that the L2DestForwardStaticRyu.py program is designed to run on its
own. It imports the the ryu.cmd import manager and uses the Ryu controller
but you start it by typing "|python l2DestForwardStaticRyu.py
--netfile=ExNetwithLoops1A.json" |where it imports
=ExNetWithLoops1A.Json.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
When this program is started, it automatically loads Ryu and
implements the code within this program. I am not sure how to start the
this and ryu.app.ofctl_rest at the same time. I have tried starting them
separately in different terminals but that did not work.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thank you also for the information you have sent. I have looked at
it before but I do not know how to implement this with my custom code. I
have been looking for examples but they seem to be few and far between. Any
advice as always would be greatly appreciated.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thanks again.
Douglas
Hi Douglas,
Excuse me for cutting in.
Just for getting flow statistics, how about running your app
and ofctl_rest
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
together as Fujimoto said.
e.g.)
$ ryu-manager your_app.py ryu.app.ofctl_rest
If you want to implement your own REST APIs on your app,
Ryu-Book is the
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
most helpful as far as I know.
(You might already be aware of this though...)
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
FYI, here is an sample implementation on simple_switch_13.py
for getting
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
flow statistics.
The usage of "WSGI" framework is described on Ryu-Book.
$ git diff
diff --git a/ryu/app/simple_switch_13.py
b/ryu/app/simple_switch_13.py
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
index 3e7c598..f33e474 100644
--- a/ryu/app/simple_switch_13.py
+++ b/ryu/app/simple_switch_13.py
@@ -13,6 +13,8 @@
# See the License for the specific language governing
permissions and
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
# limitations under the License.
+import json
+
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import CONFIG_DISPATCHER,
MAIN_DISPATCHER
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
@@ -21,14 +23,26 @@ from ryu.ofproto import ofproto_v1_3
from ryu.lib.packet import packet
from ryu.lib.packet import ethernet
from ryu.lib.packet import ether_types
+from ryu.app.ofctl import api as ofctl_api
+from ryu.app.wsgi import ControllerBase
+from ryu.app.wsgi import Response
+from ryu.app.wsgi import route
+from ryu.app.wsgi import WSGIApplication
+
+
+_URI_PREFIX = '/simpleswitch/stats/{dpid}'
OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
+ _CONTEXTS = {'wsgi': WSGIApplication}
super(SimpleSwitch13, self).__init__(*args, **kwargs)
self.mac_to_port = {}
+ wsgi = kwargs['wsgi']
+ wsgi.register(SimpleSwitchController,
+ {SimpleSwitch13.__name__: self})
@set_ev_cls(ofp_event.EventOFPSwitchFeatures,
CONFIG_DISPATCHER)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
out = parser.OFPPacketOut(datapath=datapath,
buffer_id=msg.buffer_id,
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
in_port=in_port,
actions=actions, data=data)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
datapath.send_msg(out)
+
+ datapath = ofctl_api.get_datapath(self, dpid)
+ return None
+
+ parser = datapath.ofproto_parser
+ req = parser.OFPFlowStatsRequest(datapath)
+
+ rep = ofctl_api.send_msg(
+ app=self, msg=req,
+ reply_cls=parser.OFPFlowStatsReply,
reply_multi=True)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+ return [r.to_jsondict() for r in rep]
+
+
+
+ super(SimpleSwitchController, self).__init__(req,
link, data, **config)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+ self.simple_switch_app = data[SimpleSwitch13.__name__]
+
+ dpid = int(str(kwargs['dpid']))
+ ret = self.simple_switch_app.get_flow_stats(dpid)
+ return Response(status=404)
+
+ return Response(content_type='application/json',
body=json.dumps(ret))
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
$ ryu-manager ryu/app/simple_switch_13.py
Registered VCS backend: git
Registered VCS backend: hg
Registered VCS backend: svn
Registered VCS backend: bzr
loading app ryu/app/simple_switch_13.py
loading app ryu.controller.ofp_handler
loading app ryu.app.ofctl.service
loading app ryu.controller.ofp_handler
creating context wsgi
instantiating app ryu.app.ofctl.service of OfctlService
instantiating app ryu/app/simple_switch_13.py of SimpleSwitch13
instantiating app ryu.controller.ofp_handler of OFPHandler
(10332) wsgi starting up on http://0.0.0.0:8080
...
$ curl -X GET http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> |
python -m json.tool
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
[
{
"OFPFlowStatsReply": {
"body": [
{
"OFPFlowStats": {
"byte_count": 140,
"cookie": 0,
"duration_nsec": 771000000,
"duration_sec": 1,
"flags": 0,
"hard_timeout": 0,
"idle_timeout": 0,
"instructions": [
{
"OFPInstructionActions": {
"actions": [
{
{
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
"len": 16,
65535,
4294967293,
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
"type": 0
}
}
],
"len": 24,
"type": 4
}
}
],
"length": 80,
"match": {
"OFPMatch": {
"length": 4,
"oxm_fields": [],
"type": 1
}
},
"packet_count": 2,
"priority": 0,
"table_id": 0
}
}
],
"flags": 0,
"type": 1
}
}
]
Thanks,
Iwase
Post by Douglas Harewood-Gill
Hi there. That is fantastic. Sounds exactly like what I am
looking for so thank you.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
One last question for the minute. I know you provided a link
but how do you implement this with custom Ryu controller code?
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
My apologies if I am asking something really obvious.
Cheers
Douglas
On 7 June 2017 at 01:15, Fujimoto Satoshi <
Hi, Douglas
Ryu has ofctl_rest.py, which is a sample application and
provides REST API to get flow statistics.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I think it is better to use ofctl_rest.py than to
implement your own REST API in your app.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thanks,
Fujimoto
Post by Douglas Harewood-Gill
Greetings I am a PhD student new to both Python and
Ryu and I was wondering if anyone could give me some advice.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I am using the Ryu controller program
(L2DestForwardStaticRyu.py) provided by Dr Grey Bernstein (
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>>) for shortest
path computation for a full Mesh network in Mininet but the example
provided does not include REST which I require to be able to collect flow
statistics such as the flows in each router, bandwidth, latency, etc.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Unfortunately I have been looking and with the
exception of (https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>) which seems
overly specific, I am unable to find a good example that would allow me to
work out how to integrate REST into the above Ryu control program.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
So if anyone can point me in the right direction or can
provide some examples, I would be most grateful.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thank you for your time.
Best Regards
Douglas
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of
Bristol
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building,
Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------
------------------------------------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the
world's most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org!
http://sdm.link/slashdot
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building,
Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's
most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland
Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
sourceforge.net>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
e-mail: douglas.harewood-***@bristol.ac.uk


*CDT Communications*

University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB

http://www.bristol.ac.uk/
Iwase Yusuke
2017-06-15 00:06:09 UTC
Permalink
Hi Douglas,
Hi Iwase. I did try it the other way but the error "AttributeError: 'module' object has not attribute "ofctl_rest" but it was worth trying so thank you.
Hmmm... 'ryu.app.ofctl_rest' means the Python module path to Ryu's built-in app.
If it got AttributeError, Ryu might not be installed successfully.

I recommend you to confirm Ryu is installed
$ python
import ryu # Can import "ryu"?
ryu.version # Which version?
'4.14'
from ryu.app import ofctl_rest # Can import "ofctl_rest"?
Regarding the instructions you sent me for altering Ryu, is there any chance you could explain them a bit more please? I am having a little trouble following them currently.
Sure.
Ryu defines the CLI options in some modules, the most accessible among them is
"ryu/flags.py", I guess.
https://github.com/osrg/ryu/blob/master/ryu/flags.py

But to reflect your changes, you need to "re-install" Ryu before running your
applications.
So If you want to define your own CLI option,
0. Checkout Ryu Git src (if needed).
$ git clone https://github.com/osrg/ryu.git
$ cd ryu
1. Add your definitions into "ryu/flags.py".
The syntax is the same as "oslo.config".
https://docs.openstack.org/developer/oslo.config/
2. Re-install Ryu at the top of Ryu directory.
$ pip install -r tools/pip-requires
$ python setup.py install
3. Confirm your own option is inserted into ryu-manager.
$ ryu-manager --help


Thanks,
Iwase
Thank you :)
Douglas
Hi Douglas,
Hmmm... how about swapping the order of arguments?
e.g)
manager.main(args=['ryu.app.ofctl_rest'] + sys.argv)
FYI, I guess Dr.Bernstein did "hack"(used "ryu.cmd.manager" directly) in order to
add original CLI option like "--netfile" and "--widest_paths".
On the other hand, you can add your original CLI option as following.
$ git diff
diff --git a/ryu/flags.py b/ryu/flags.py
index 69eb3d2..ebf16c8 100644
--- a/ryu/flags.py
+++ b/ryu/flags.py
@@ -112,3 +112,10 @@ CONF.register_cli_opts([
help='Initial Router ID used by Zebra protocol service '
'(default: %s)' % DEFAULT_ZSERV_ROUTER_ID),
], group='zapi')
+
+CONF.register_cli_opts([
+ cfg.StrOpt(
+ 'netfile', default=None, help='network json file'),
+ cfg.BoolOpt(
+ 'widest_paths', default=False, help='Use widest path.'),
+])
Please note you need to re-install Ryu after the above modifications.
$ python setup.py install
Then, with this modification, you can run "l2DestForwardStaticRyu.py" as the
$ ryu-manager --help
...(snip)...
--netfile NETFILE network json file
...(snip)...
--widest_paths Use widest path.
...(snip)...
$ ryu-manager l2DestForwardStaticRyu.py ryu.app.ofctl_rest --netfile=ExNetwithLoops1A.json --widest_paths
Thanks,
Iwase
Hi Iwase and thank you for getting back to me. The author of this program, Dr Bernstein added this line "from ryu.cmd import manager" which as far as I understand directly starts Ryu from within side L2DestForwardStaticRyu.py. Should be around line 29 I think. He had to do this he told me because he could not start the program in the conventional way because he needed to import the "ExNetwithLoops!A.json file" for the topology with static mac and IP addresses. Apparently he could not do this just using the standard Ryu format of starting the Ryu Manager with the Controller file and then with REST.
I tried your suggestion by removing "manager.main(args=sys.argv)"
from " if __name__ == "__main__": "
and using the following:-
"manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])" and I got the following error message in the terminal.
"l2DestForwardStaticRyuNS: error: unrecognized arguments: ryu.app.ofctl_rest"
Any advice would be welcome. I am obviously going to see what I can find here and will let you know if I find anything relevant.
Cheers
Douglas
Hi Douglas,
I checked "L2DestForwardStaticRyu.py", and it seems to be "hacked" to run
app without "ryu-manager".
To start the built-in Ryu application with "L2DestForwardStaticRyu.py",
how about the following?
The following appends to "ofctl_rest" app to the argument of "manager".
- manager.main(args=sys.argv)
+ manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])
Thanks,
Iwase
Hi Iwase. Thank you for contacting me and apologies for my delay in responding. I have tried what you have suggested but the problem I have is that the L2DestForwardStaticRyu.py program is designed to run on its own. It imports the the ryu.cmd import manager and uses the Ryu controller but you start it by typing "|python l2DestForwardStaticRyu.py --netfile=ExNetwithLoops1A.json" |where it imports =ExNetWithLoops1A.Json.
When this program is started, it automatically loads Ryu and implements the code within this program. I am not sure how to start the this and ryu.app.ofctl_rest at the same time. I have tried starting them separately in different terminals but that did not work.
Thank you also for the information you have sent. I have looked at it before but I do not know how to implement this with my custom code. I have been looking for examples but they seem to be few and far between. Any advice as always would be greatly appreciated.
Thanks again.
Douglas
Hi Douglas,
Excuse me for cutting in.
Just for getting flow statistics, how about running your app and ofctl_rest
together as Fujimoto said.
e.g.)
$ ryu-manager your_app.py ryu.app.ofctl_rest
If you want to implement your own REST APIs on your app, Ryu-Book is the
most helpful as far as I know.
(You might already be aware of this though...)
http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>>>
FYI, here is an sample implementation on simple_switch_13.py for getting
flow statistics.
The usage of "WSGI" framework is described on Ryu-Book.
$ git diff
diff --git a/ryu/app/simple_switch_13.py b/ryu/app/simple_switch_13.py
index 3e7c598..f33e474 100644
--- a/ryu/app/simple_switch_13.py
+++ b/ryu/app/simple_switch_13.py
@@ -13,6 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import json
+
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER
@@ -21,14 +23,26 @@ from ryu.ofproto import ofproto_v1_3
from ryu.lib.packet import packet
from ryu.lib.packet import ethernet
from ryu.lib.packet import ether_types
+from ryu.app.ofctl import api as ofctl_api
+from ryu.app.wsgi import ControllerBase
+from ryu.app.wsgi import Response
+from ryu.app.wsgi import route
+from ryu.app.wsgi import WSGIApplication
+
+
+_URI_PREFIX = '/simpleswitch/stats/{dpid}'
OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
+ _CONTEXTS = {'wsgi': WSGIApplication}
super(SimpleSwitch13, self).__init__(*args, **kwargs)
self.mac_to_port = {}
+ wsgi = kwargs['wsgi']
+ wsgi.register(SimpleSwitchController,
+ {SimpleSwitch13.__name__: self})
@set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
out = parser.OFPPacketOut(datapath=datapath, buffer_id=msg.buffer_id,
in_port=in_port, actions=actions, data=data)
datapath.send_msg(out)
+
+ datapath = ofctl_api.get_datapath(self, dpid)
+ return None
+
+ parser = datapath.ofproto_parser
+ req = parser.OFPFlowStatsRequest(datapath)
+
+ rep = ofctl_api.send_msg(
+ app=self, msg=req,
+ reply_cls=parser.OFPFlowStatsReply, reply_multi=True)
+ return [r.to_jsondict() for r in rep]
+
+
+
+ super(SimpleSwitchController, self).__init__(req, link, data, **config)
+ self.simple_switch_app = data[SimpleSwitch13.__name__]
+
+ dpid = int(str(kwargs['dpid']))
+ ret = self.simple_switch_app.get_flow_stats(dpid)
+ return Response(status=404)
+
+ return Response(content_type='application/json', body=json.dumps(ret))
$ ryu-manager ryu/app/simple_switch_13.py
Registered VCS backend: git
Registered VCS backend: hg
Registered VCS backend: svn
Registered VCS backend: bzr
loading app ryu/app/simple_switch_13.py
loading app ryu.controller.ofp_handler
loading app ryu.app.ofctl.service
loading app ryu.controller.ofp_handler
creating context wsgi
instantiating app ryu.app.ofctl.service of OfctlService
instantiating app ryu/app/simple_switch_13.py of SimpleSwitch13
instantiating app ryu.controller.ofp_handler of OFPHandler
(10332) wsgi starting up on http://0.0.0.0:8080
...
$ curl -X GET http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>> | python -m json.tool
[
{
"OFPFlowStatsReply": {
"body": [
{
"OFPFlowStats": {
"byte_count": 140,
"cookie": 0,
"duration_nsec": 771000000,
"duration_sec": 1,
"flags": 0,
"hard_timeout": 0,
"idle_timeout": 0,
"instructions": [
{
"OFPInstructionActions": {
"actions": [
{
"OFPActionOutput": {
"len": 16,
"max_len": 65535,
"port": 4294967293,
"type": 0
}
}
],
"len": 24,
"type": 4
}
}
],
"length": 80,
"match": {
"OFPMatch": {
"length": 4,
"oxm_fields": [],
"type": 1
}
},
"packet_count": 2,
"priority": 0,
"table_id": 0
}
}
],
"flags": 0,
"type": 1
}
}
]
Thanks,
Iwase
Hi there. That is fantastic. Sounds exactly like what I am looking for so thank you.
One last question for the minute. I know you provided a link but how do you implement this with custom Ryu controller code?
My apologies if I am asking something really obvious.
Cheers
Douglas
Hi, Douglas
Ryu has ofctl_rest.py, which is a sample application and provides REST API to get flow statistics.
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>
I think it is better to use ofctl_rest.py than to implement your own REST API in your app.
Thanks,
Fujimoto
Greetings I am a PhD student new to both Python and Ryu and I was wondering if anyone could give me some advice.
I am using the Ryu controller program (L2DestForwardStaticRyu.py) provided by Dr Grey Bernstein (https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>) for shortest path computation for a full Mesh network in Mininet but the example provided does not include REST which I require to be able to collect flow statistics such as the flows in each router, bandwidth, latency, etc.
Unfortunately I have been looking and with the exception of (https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>) which seems
overly specific, I am unable to find a good example that would allow me to work out how to integrate REST into the above Ryu control program.
So if anyone can point me in the right direction or can provide some examples, I would be most grateful.
Thank you for your time.
Best Regards
Douglas
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
Douglas Harewood-Gill
2017-06-15 14:55:31 UTC
Permalink
Hello again. Ok, My apologies bit I really need you to simplify this for
me. Starting with the first bit.

1) Ryu is definitely installed but do you know the command to check the
version? I have looked online but I can't find anything specific.
2) Is there also a way to check that Ryu is installed correctly?
3) What do you mean by "import ryu" and "ryu.version"?
4) Also, "from ryu.app import ofctl_rest"?

I will see if I can work through this first to see if I can get it working
this way before I look at the second bit. :D

Thank you for your time and patience so far.

Cheers

Douglas
Post by Iwase Yusuke
Hi Douglas,
'module' object has not attribute "ofctl_rest" but it was worth trying so
thank you.
Hmmm... 'ryu.app.ofctl_rest' means the Python module path to Ryu's built-in app.
If it got AttributeError, Ryu might not be installed successfully.
I recommend you to confirm Ryu is installed
$ python
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
import ryu # Can import "ryu"?
ryu.version # Which version?
'4.14'
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
from ryu.app import ofctl_rest # Can import "ofctl_rest"?
Regarding the instructions you sent me for altering Ryu, is there any
chance you could explain them a bit more please? I am having a little
trouble following them currently.
Sure.
Ryu defines the CLI options in some modules, the most accessible among them is
"ryu/flags.py", I guess.
https://github.com/osrg/ryu/blob/master/ryu/flags.py
But to reflect your changes, you need to "re-install" Ryu before running your
applications.
So If you want to define your own CLI option,
0. Checkout Ryu Git src (if needed).
$ git clone https://github.com/osrg/ryu.git
$ cd ryu
1. Add your definitions into "ryu/flags.py".
The syntax is the same as "oslo.config".
https://docs.openstack.org/developer/oslo.config/
2. Re-install Ryu at the top of Ryu directory.
$ pip install -r tools/pip-requires
$ python setup.py install
3. Confirm your own option is inserted into ryu-manager.
$ ryu-manager --help
Thanks,
Iwase
Post by Douglas Harewood-Gill
Thank you :)
Douglas
Hi Douglas,
Hmmm... how about swapping the order of arguments?
e.g)
manager.main(args=['ryu.app.ofctl_rest'] + sys.argv)
FYI, I guess Dr.Bernstein did "hack"(used "ryu.cmd.manager"
directly) in order to
Post by Douglas Harewood-Gill
add original CLI option like "--netfile" and "--widest_paths".
On the other hand, you can add your original CLI option as following.
$ git diff
diff --git a/ryu/flags.py b/ryu/flags.py
index 69eb3d2..ebf16c8 100644
--- a/ryu/flags.py
+++ b/ryu/flags.py
@@ -112,3 +112,10 @@ CONF.register_cli_opts([
help='Initial Router ID used by Zebra protocol service '
'(default: %s)' % DEFAULT_ZSERV_ROUTER_ID),
], group='zapi')
+
+CONF.register_cli_opts([
+ cfg.StrOpt(
+ 'netfile', default=None, help='network json file'),
+ cfg.BoolOpt(
+ 'widest_paths', default=False, help='Use widest path.'),
+])
Please note you need to re-install Ryu after the above modifications.
$ python setup.py install
Then, with this modification, you can run
"l2DestForwardStaticRyu.py" as the
Post by Douglas Harewood-Gill
$ ryu-manager --help
...(snip)...
--netfile NETFILE network json file
...(snip)...
--widest_paths Use widest path.
...(snip)...
$ ryu-manager l2DestForwardStaticRyu.py ryu.app.ofctl_rest
--netfile=ExNetwithLoops1A.json --widest_paths
Post by Douglas Harewood-Gill
Thanks,
Iwase
Post by Douglas Harewood-Gill
Hi Iwase and thank you for getting back to me. The author of this
program, Dr Bernstein added this line "from ryu.cmd import manager" which
as far as I understand directly starts Ryu from within side
L2DestForwardStaticRyu.py. Should be around line 29 I think. He had to do
this he told me because he could not start the program in the conventional
way because he needed to import the "ExNetwithLoops!A.json file" for the
topology with static mac and IP addresses. Apparently he could not do this
just using the standard Ryu format of starting the Ryu Manager with the
Controller file and then with REST.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I tried your suggestion by removing "manager.main(args=sys.argv)"
from " if __name__ == "__main__": "
and using the following:-
"manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])" and I got
the following error message in the terminal.
ryu.app.ofctl_rest"
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Any advice would be welcome. I am obviously going to see what I
can find here and will let you know if I find anything relevant.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Cheers
Douglas
Hi Douglas,
I checked "L2DestForwardStaticRyu.py", and it seems to be
"hacked" to run
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
app without "ryu-manager".
To start the built-in Ryu application with
"L2DestForwardStaticRyu.py",
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
how about the following?
The following appends to "ofctl_rest" app to the argument of
"manager".
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
- manager.main(args=sys.argv)
+ manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])
Thanks,
Iwase
Hi Iwase. Thank you for contacting me and apologies for my
delay in responding. I have tried what you have suggested but the problem I
have is that the L2DestForwardStaticRyu.py program is designed to run on
its own. It imports the the ryu.cmd import manager and uses the Ryu
controller but you start it by typing "|python l2DestForwardStaticRyu.py
--netfile=ExNetwithLoops1A.json" |where it imports
=ExNetWithLoops1A.Json.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
When this program is started, it automatically loads Ryu and
implements the code within this program. I am not sure how to start the
this and ryu.app.ofctl_rest at the same time. I have tried starting them
separately in different terminals but that did not work.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thank you also for the information you have sent. I have
looked at it before but I do not know how to implement this with my custom
code. I have been looking for examples but they seem to be few and far
between. Any advice as always would be greatly appreciated.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thanks again.
Douglas
On 8 June 2017 at 01:27, Iwase Yusuke <
Hi Douglas,
Excuse me for cutting in.
Just for getting flow statistics, how about running your
app and ofctl_rest
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
together as Fujimoto said.
e.g.)
$ ryu-manager your_app.py ryu.app.ofctl_rest
If you want to implement your own REST APIs on your app,
Ryu-Book is the
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
most helpful as far as I know.
(You might already be aware of this though...)
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
FYI, here is an sample implementation on
simple_switch_13.py for getting
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
flow statistics.
The usage of "WSGI" framework is described on Ryu-Book.
$ git diff
diff --git a/ryu/app/simple_switch_13.py
b/ryu/app/simple_switch_13.py
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
index 3e7c598..f33e474 100644
--- a/ryu/app/simple_switch_13.py
+++ b/ryu/app/simple_switch_13.py
@@ -13,6 +13,8 @@
# See the License for the specific language governing
permissions and
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
# limitations under the License.
+import json
+
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import CONFIG_DISPATCHER,
MAIN_DISPATCHER
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
@@ -21,14 +23,26 @@ from ryu.ofproto import ofproto_v1_3
from ryu.lib.packet import packet
from ryu.lib.packet import ethernet
from ryu.lib.packet import ether_types
+from ryu.app.ofctl import api as ofctl_api
+from ryu.app.wsgi import ControllerBase
+from ryu.app.wsgi import Response
+from ryu.app.wsgi import route
+from ryu.app.wsgi import WSGIApplication
+
+
+_URI_PREFIX = '/simpleswitch/stats/{dpid}'
OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
+ _CONTEXTS = {'wsgi': WSGIApplication}
super(SimpleSwitch13, self).__init__(*args,
**kwargs)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
self.mac_to_port = {}
+ wsgi = kwargs['wsgi']
+ wsgi.register(SimpleSwitchController,
+ {SimpleSwitch13.__name__: self})
@set_ev_cls(ofp_event.EventOFPSwitchFeatures,
CONFIG_DISPATCHER)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
@@ -117,3 +131,32 @@ class SimpleSwitch13(app_manager.
out = parser.OFPPacketOut(datapath=datapath,
buffer_id=msg.buffer_id,
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
in_port=in_port,
actions=actions, data=data)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
datapath.send_msg(out)
+
+ datapath = ofctl_api.get_datapath(self, dpid)
+ return None
+
+ parser = datapath.ofproto_parser
+ req = parser.OFPFlowStatsRequest(datapath)
+
+ rep = ofctl_api.send_msg(
+ app=self, msg=req,
+ reply_cls=parser.OFPFlowStatsReply,
reply_multi=True)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+ return [r.to_jsondict() for r in rep]
+
+
+
+ super(SimpleSwitchController,
self).__init__(req, link, data, **config)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+ self.simple_switch_app =
data[SimpleSwitch13.__name__]
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+
+ dpid = int(str(kwargs['dpid']))
+ ret = self.simple_switch_app.get_
flow_stats(dpid)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+ return Response(status=404)
+
+ return Response(content_type='application/json',
body=json.dumps(ret))
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
$ ryu-manager ryu/app/simple_switch_13.py
Registered VCS backend: git
Registered VCS backend: hg
Registered VCS backend: svn
Registered VCS backend: bzr
loading app ryu/app/simple_switch_13.py
loading app ryu.controller.ofp_handler
loading app ryu.app.ofctl.service
loading app ryu.controller.ofp_handler
creating context wsgi
instantiating app ryu.app.ofctl.service of OfctlService
instantiating app ryu/app/simple_switch_13.py of
SimpleSwitch13
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
instantiating app ryu.controller.ofp_handler of
OFPHandler
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
(10332) wsgi starting up on http://0.0.0.0:8080
...
$ curl -X GET http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/
simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1>>> | python -m json.tool
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
[
{
"OFPFlowStatsReply": {
"body": [
{
"OFPFlowStats": {
"byte_count": 140,
"cookie": 0,
"duration_nsec": 771000000,
"duration_sec": 1,
"flags": 0,
"hard_timeout": 0,
"idle_timeout": 0,
"instructions": [
{
{
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
"actions": [
{
"OFPActionOutput": {
16,
"max_len": 65535,
4294967293,
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
"type": 0
}
}
],
"len": 24,
"type": 4
}
}
],
"length": 80,
"match": {
"OFPMatch": {
"length": 4,
"oxm_fields": [],
"type": 1
}
},
"packet_count": 2,
"priority": 0,
"table_id": 0
}
}
],
"flags": 0,
"type": 1
}
}
]
Thanks,
Iwase
Post by Douglas Harewood-Gill
Hi there. That is fantastic. Sounds exactly like what
I am looking for so thank you.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
One last question for the minute. I know you provided
a link but how do you implement this with custom Ryu controller code?
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
My apologies if I am asking something really obvious.
Cheers
Douglas
On 7 June 2017 at 01:15, Fujimoto Satoshi <
Hi, Douglas
Ryu has ofctl_rest.py, which is a sample
application and provides REST API to get flow statistics.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html>>> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I think it is better to use ofctl_rest.py than to
implement your own REST API in your app.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thanks,
Fujimoto
Post by Douglas Harewood-Gill
Greetings I am a PhD student new to both Python
and Ryu and I was wondering if anyone could give me some advice.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I am using the Ryu controller program
(L2DestForwardStaticRyu.py) provided by Dr Grey Bernstein (
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu>> <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu> <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu>>>>) for shortest path computation for a
full Mesh network in Mininet but the example provided does not include REST
which I require to be able to collect flow statistics such as the flows in
each router, bandwidth, latency, etc.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Unfortunately I have been looking and with the
exception of (https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>) which seems
Post by Douglas Harewood-Gill
overly specific, I am unable to find a good example that would allow
me to work out how to integrate REST into the above Ryu control program.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
So if anyone can point me in the right direction
or can provide some examples, I would be most grateful.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thank you for your time.
Best Regards
Douglas
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University
of Bristol
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught and Research)
bristol.ac.uk>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
*
CDT Communications*
University of Bristol, Merchant Venturers'
Building, Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------
------------------------------------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of
the world's most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org!
http://sdm.link/slashdot
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/
lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of
Bristol
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building,
Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------
------------------------------------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the
world's most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org!
http://sdm.link/slashdot
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building,
Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's
most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland
Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
sourceforge.net>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
e-mail: douglas.harewood-***@bristol.ac.uk


*CDT Communications*

University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB

http://www.bristol.ac.uk/
Iwase Yusuke
2017-06-15 23:58:12 UTC
Permalink
Hi Douglas,
Hello again. Ok, My apologies bit I really need you to simplify this for me. Starting with the first bit.
1) Ryu is definitely installed but do you know the command to check the version? I have looked online but I can't find anything specific.
2) Is there also a way to check that Ryu is installed correctly?
3) What do you mean by "import ryu" and "ryu.version"?
4) Also, "from ryu.app import ofctl_rest"?
The commands I wrote on the previous mail can check these points.

"python" command on your shell starts Python interpreter with "Interactive Mode"
https://docs.python.org/2/tutorial/interpreter.html#interactive-mode

"import ryu" and followed by other words are command (source code) for Python
interactive interpreter.
- "import ryu" checks whether Ryu is installed correctly or not.
- "ryu.version" shows version (e.g., '4.14').
- "from ryu.app import ofctl_rest" checks whether "ofctl_rest" can be imported
from your Python or not.

$ python # start Python interactive interpreter
import ryu # checks if "ryu" is installed or not
ryu.version # show version info
'4.14'
from ryu.app import ofctl_rest # Can import "ofctl_rest"?
Thanks,
Iwase
I will see if I can work through this first to see if I can get it working this way before I look at the second bit. :D
Thank you for your time and patience so far.
Cheers
Douglas
Hi Douglas,
Hi Iwase. I did try it the other way but the error "AttributeError: 'module' object has not attribute "ofctl_rest" but it was worth trying so thank you.
Hmmm... 'ryu.app.ofctl_rest' means the Python module path to Ryu's built-in app.
If it got AttributeError, Ryu might not be installed successfully.
I recommend you to confirm Ryu is installed
$ python
import ryu # Can import "ryu"?
ryu.version # Which version?
'4.14'
from ryu.app import ofctl_rest # Can import "ofctl_rest"?
Regarding the instructions you sent me for altering Ryu, is there any chance you could explain them a bit more please? I am having a little trouble following them currently.
Sure.
Ryu defines the CLI options in some modules, the most accessible among them is
"ryu/flags.py", I guess.
https://github.com/osrg/ryu/blob/master/ryu/flags.py <https://github.com/osrg/ryu/blob/master/ryu/flags.py>
But to reflect your changes, you need to "re-install" Ryu before running your
applications.
So If you want to define your own CLI option,
0. Checkout Ryu Git src (if needed).
$ git clone https://github.com/osrg/ryu.git <https://github.com/osrg/ryu.git>
$ cd ryu
1. Add your definitions into "ryu/flags.py".
The syntax is the same as "oslo.config".
https://docs.openstack.org/developer/oslo.config/ <https://docs.openstack.org/developer/oslo.config/>
2. Re-install Ryu at the top of Ryu directory.
$ pip install -r tools/pip-requires
$ python setup.py install
3. Confirm your own option is inserted into ryu-manager.
$ ryu-manager --help
Thanks,
Iwase
Thank you :)
Douglas
Hi Douglas,
Hmmm... how about swapping the order of arguments?
e.g)
manager.main(args=['ryu.app.ofctl_rest'] + sys.argv)
FYI, I guess Dr.Bernstein did "hack"(used "ryu.cmd.manager" directly) in order to
add original CLI option like "--netfile" and "--widest_paths".
On the other hand, you can add your original CLI option as following.
$ git diff
diff --git a/ryu/flags.py b/ryu/flags.py
index 69eb3d2..ebf16c8 100644
--- a/ryu/flags.py
+++ b/ryu/flags.py
@@ -112,3 +112,10 @@ CONF.register_cli_opts([
help='Initial Router ID used by Zebra protocol service '
'(default: %s)' % DEFAULT_ZSERV_ROUTER_ID),
], group='zapi')
+
+CONF.register_cli_opts([
+ cfg.StrOpt(
+ 'netfile', default=None, help='network json file'),
+ cfg.BoolOpt(
+ 'widest_paths', default=False, help='Use widest path.'),
+])
Please note you need to re-install Ryu after the above modifications.
$ python setup.py install
Then, with this modification, you can run "l2DestForwardStaticRyu.py" as the
$ ryu-manager --help
...(snip)...
--netfile NETFILE network json file
...(snip)...
--widest_paths Use widest path.
...(snip)...
$ ryu-manager l2DestForwardStaticRyu.py ryu.app.ofctl_rest --netfile=ExNetwithLoops1A.json --widest_paths
Thanks,
Iwase
Hi Iwase and thank you for getting back to me. The author of this program, Dr Bernstein added this line "from ryu.cmd import manager" which as far as I understand directly starts Ryu from within side L2DestForwardStaticRyu.py. Should be around line 29 I think. He had to do this he told me because he could not start the program in the conventional way because he needed to import the "ExNetwithLoops!A.json file" for the topology with static mac and IP addresses. Apparently he could not do this just using the standard Ryu format of starting the Ryu Manager with the Controller file and then with REST.
I tried your suggestion by removing "manager.main(args=sys.argv)"
from " if __name__ == "__main__": "
and using the following:-
"manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])" and I got the following error message in the terminal.
"l2DestForwardStaticRyuNS: error: unrecognized arguments: ryu.app.ofctl_rest"
Any advice would be welcome. I am obviously going to see what I can find here and will let you know if I find anything relevant.
Cheers
Douglas
Hi Douglas,
I checked "L2DestForwardStaticRyu.py", and it seems to be "hacked" to run
app without "ryu-manager".
To start the built-in Ryu application with "L2DestForwardStaticRyu.py",
how about the following?
The following appends to "ofctl_rest" app to the argument of "manager".
- manager.main(args=sys.argv)
+ manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])
Thanks,
Iwase
Hi Iwase. Thank you for contacting me and apologies for my delay in responding. I have tried what you have suggested but the problem I have is that the L2DestForwardStaticRyu.py program is designed to run on its own. It imports the the ryu.cmd import manager and uses the Ryu controller but you start it by typing "|python l2DestForwardStaticRyu.py --netfile=ExNetwithLoops1A.json" |where it imports =ExNetWithLoops1A.Json.
When this program is started, it automatically loads Ryu and implements the code within this program. I am not sure how to start the this and ryu.app.ofctl_rest at the same time. I have tried starting them separately in different terminals but that did not work.
Thank you also for the information you have sent. I have looked at it before but I do not know how to implement this with my custom code. I have been looking for examples but they seem to be few and far between. Any advice as always would be greatly appreciated.
Thanks again.
Douglas
Hi Douglas,
Excuse me for cutting in.
Just for getting flow statistics, how about running your app and ofctl_rest
together as Fujimoto said.
e.g.)
$ ryu-manager your_app.py ryu.app.ofctl_rest
If you want to implement your own REST APIs on your app, Ryu-Book is the
most helpful as far as I know.
(You might already be aware of this though...)
http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>>>>
FYI, here is an sample implementation on simple_switch_13.py for getting
flow statistics.
The usage of "WSGI" framework is described on Ryu-Book.
$ git diff
diff --git a/ryu/app/simple_switch_13.py b/ryu/app/simple_switch_13.py
index 3e7c598..f33e474 100644
--- a/ryu/app/simple_switch_13.py
+++ b/ryu/app/simple_switch_13.py
@@ -13,6 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import json
+
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER
@@ -21,14 +23,26 @@ from ryu.ofproto import ofproto_v1_3
from ryu.lib.packet import packet
from ryu.lib.packet import ethernet
from ryu.lib.packet import ether_types
+from ryu.app.ofctl import api as ofctl_api
+from ryu.app.wsgi import ControllerBase
+from ryu.app.wsgi import Response
+from ryu.app.wsgi import route
+from ryu.app.wsgi import WSGIApplication
+
+
+_URI_PREFIX = '/simpleswitch/stats/{dpid}'
OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
+ _CONTEXTS = {'wsgi': WSGIApplication}
super(SimpleSwitch13, self).__init__(*args, **kwargs)
self.mac_to_port = {}
+ wsgi = kwargs['wsgi']
+ wsgi.register(SimpleSwitchController,
+ {SimpleSwitch13.__name__: self})
@set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
out = parser.OFPPacketOut(datapath=datapath, buffer_id=msg.buffer_id,
in_port=in_port, actions=actions, data=data)
datapath.send_msg(out)
+
+ datapath = ofctl_api.get_datapath(self, dpid)
+ return None
+
+ parser = datapath.ofproto_parser
+ req = parser.OFPFlowStatsRequest(datapath)
+
+ rep = ofctl_api.send_msg(
+ app=self, msg=req,
+ reply_cls=parser.OFPFlowStatsReply, reply_multi=True)
+ return [r.to_jsondict() for r in rep]
+
+
+
+ super(SimpleSwitchController, self).__init__(req, link, data, **config)
+ self.simple_switch_app = data[SimpleSwitch13.__name__]
+
+ dpid = int(str(kwargs['dpid']))
+ ret = self.simple_switch_app.get_flow_stats(dpid)
+ return Response(status=404)
+
+ return Response(content_type='application/json', body=json.dumps(ret))
$ ryu-manager ryu/app/simple_switch_13.py
Registered VCS backend: git
Registered VCS backend: hg
Registered VCS backend: svn
Registered VCS backend: bzr
loading app ryu/app/simple_switch_13.py
loading app ryu.controller.ofp_handler
loading app ryu.app.ofctl.service
loading app ryu.controller.ofp_handler
creating context wsgi
instantiating app ryu.app.ofctl.service of OfctlService
instantiating app ryu/app/simple_switch_13.py of SimpleSwitch13
instantiating app ryu.controller.ofp_handler of OFPHandler
(10332) wsgi starting up on http://0.0.0.0:8080
...
$ curl -X GET http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>>> | python -m json.tool
[
{
"OFPFlowStatsReply": {
"body": [
{
"OFPFlowStats": {
"byte_count": 140,
"cookie": 0,
"duration_nsec": 771000000,
"duration_sec": 1,
"flags": 0,
"hard_timeout": 0,
"idle_timeout": 0,
"instructions": [
{
"OFPInstructionActions": {
"actions": [
{
"OFPActionOutput": {
"len": 16,
"max_len": 65535,
"port": 4294967293,
"type": 0
}
}
],
"len": 24,
"type": 4
}
}
],
"length": 80,
"match": {
"OFPMatch": {
"length": 4,
"oxm_fields": [],
"type": 1
}
},
"packet_count": 2,
"priority": 0,
"table_id": 0
}
}
],
"flags": 0,
"type": 1
}
}
]
Thanks,
Iwase
Hi there. That is fantastic. Sounds exactly like what I am looking for so thank you.
One last question for the minute. I know you provided a link but how do you implement this with custom Ryu controller code?
My apologies if I am asking something really obvious.
Cheers
Douglas
Hi, Douglas
Ryu has ofctl_rest.py, which is a sample application and provides REST API to get flow statistics.
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>>
I think it is better to use ofctl_rest.py than to implement your own REST API in your app.
Thanks,
Fujimoto
Greetings I am a PhD student new to both Python and Ryu and I was wondering if anyone could give me some advice.
I am using the Ryu controller program (L2DestForwardStaticRyu.py) provided by Dr Grey Bernstein (https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>>) for shortest path computation for a full Mesh network in Mininet but the example provided does not include REST which I require to be able to collect flow statistics such as the flows in each router,
bandwidth, latency, etc.
Unfortunately I have been looking and with the exception of (https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>) which seems
overly specific, I am unable to find a good example that would allow me to work out how to integrate REST into the above Ryu control program.
So if anyone can point me in the right direction or can provide some examples, I would be most grateful.
Thank you for your time.
Best Regards
Douglas
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
Douglas Harewood-Gill
2017-06-20 14:22:26 UTC
Permalink
Hi again. Apologies for the delay in responding and thank you for getting
back to me so quickly.

I finally figured out what you were telling me. So, below is what I found
for each step of the first thing you suggested.

After using "Python #" to enter the interactive interpreter I typed
"import ryu" and I received no errors, it just went to a new line with this
">>>".

For "ryu.version", it told me my version is 4.12.

For "ryu.app import ofctl_rest", and I I received no errors, it just went
to a new line with this ">>>".


Cheers

Douglas
Post by Iwase Yusuke
Hi Douglas,
Post by Douglas Harewood-Gill
Hello again. Ok, My apologies bit I really need you to simplify this for
me. Starting with the first bit.
Post by Douglas Harewood-Gill
1) Ryu is definitely installed but do you know the command to check the
version? I have looked online but I can't find anything specific.
Post by Douglas Harewood-Gill
2) Is there also a way to check that Ryu is installed correctly?
3) What do you mean by "import ryu" and "ryu.version"?
4) Also, "from ryu.app import ofctl_rest"?
The commands I wrote on the previous mail can check these points.
"python" command on your shell starts Python interpreter with "Interactive Mode"
https://docs.python.org/2/tutorial/interpreter.html#interactive-mode
"import ryu" and followed by other words are command (source code) for Python
interactive interpreter.
- "import ryu" checks whether Ryu is installed correctly or not.
- "ryu.version" shows version (e.g., '4.14').
- "from ryu.app import ofctl_rest" checks whether "ofctl_rest" can be imported
from your Python or not.
$ python # start Python interactive interpreter
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
import ryu # checks if "ryu" is installed or not
ryu.version # show version info
'4.14'
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
from ryu.app import ofctl_rest # Can import "ofctl_rest"?
Thanks,
Iwase
Post by Douglas Harewood-Gill
I will see if I can work through this first to see if I can get it
working this way before I look at the second bit. :D
Post by Douglas Harewood-Gill
Thank you for your time and patience so far.
Cheers
Douglas
Hi Douglas,
Post by Douglas Harewood-Gill
Hi Iwase. I did try it the other way but the error
"AttributeError: 'module' object has not attribute "ofctl_rest" but it was
worth trying so thank you.
Post by Douglas Harewood-Gill
Hmmm... 'ryu.app.ofctl_rest' means the Python module path to Ryu's
built-in app.
Post by Douglas Harewood-Gill
If it got AttributeError, Ryu might not be installed successfully.
I recommend you to confirm Ryu is installed
$ python
Post by Douglas Harewood-Gill
import ryu # Can import "ryu"?
ryu.version # Which version?
'4.14'
Post by Douglas Harewood-Gill
from ryu.app import ofctl_rest # Can import "ofctl_rest"?
Regarding the instructions you sent me for altering Ryu, is there
any chance you could explain them a bit more please? I am having a little
trouble following them currently.
Post by Douglas Harewood-Gill
Sure.
Ryu defines the CLI options in some modules, the most accessible
among them is
Post by Douglas Harewood-Gill
"ryu/flags.py", I guess.
https://github.com/osrg/ryu/blob/master/ryu/flags.py <
https://github.com/osrg/ryu/blob/master/ryu/flags.py>
Post by Douglas Harewood-Gill
But to reflect your changes, you need to "re-install" Ryu before
running your
Post by Douglas Harewood-Gill
applications.
So If you want to define your own CLI option,
0. Checkout Ryu Git src (if needed).
$ git clone https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git>
Post by Douglas Harewood-Gill
$ cd ryu
1. Add your definitions into "ryu/flags.py".
The syntax is the same as "oslo.config".
https://docs.openstack.org/developer/oslo.config/ <
https://docs.openstack.org/developer/oslo.config/>
Post by Douglas Harewood-Gill
2. Re-install Ryu at the top of Ryu directory.
$ pip install -r tools/pip-requires
$ python setup.py install
3. Confirm your own option is inserted into ryu-manager.
$ ryu-manager --help
Thanks,
Iwase
Post by Douglas Harewood-Gill
Thank you :)
Douglas
Hi Douglas,
Hmmm... how about swapping the order of arguments?
e.g)
manager.main(args=['ryu.app.ofctl_rest'] + sys.argv)
FYI, I guess Dr.Bernstein did "hack"(used "ryu.cmd.manager"
directly) in order to
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
add original CLI option like "--netfile" and "--widest_paths".
On the other hand, you can add your original CLI option as
following.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
$ git diff
diff --git a/ryu/flags.py b/ryu/flags.py
index 69eb3d2..ebf16c8 100644
--- a/ryu/flags.py
+++ b/ryu/flags.py
@@ -112,3 +112,10 @@ CONF.register_cli_opts([
help='Initial Router ID used by Zebra protocol
service '
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
'(default: %s)' % DEFAULT_ZSERV_ROUTER_ID),
], group='zapi')
+
+CONF.register_cli_opts([
+ cfg.StrOpt(
+ 'netfile', default=None, help='network json file'),
+ cfg.BoolOpt(
+ 'widest_paths', default=False, help='Use widest
path.'),
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+])
Please note you need to re-install Ryu after the above
modifications.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
$ python setup.py install
Then, with this modification, you can run
"l2DestForwardStaticRyu.py" as the
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
$ ryu-manager --help
...(snip)...
--netfile NETFILE network json file
...(snip)...
--widest_paths Use widest path.
...(snip)...
$ ryu-manager l2DestForwardStaticRyu.py ryu.app.ofctl_rest
--netfile=ExNetwithLoops1A.json --widest_paths
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thanks,
Iwase
Hi Iwase and thank you for getting back to me. The author of
this program, Dr Bernstein added this line "from ryu.cmd import manager"
which as far as I understand directly starts Ryu from within side
L2DestForwardStaticRyu.py. Should be around line 29 I think. He had to do
this he told me because he could not start the program in the conventional
way because he needed to import the "ExNetwithLoops!A.json file" for the
topology with static mac and IP addresses. Apparently he could not do this
just using the standard Ryu format of starting the Ryu Manager with the
Controller file and then with REST.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I tried your suggestion by removing
"manager.main(args=sys.argv)"
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
from " if __name__ == "__main__": "
and using the following:-
"manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])" and I
got the following error message in the terminal.
ryu.app.ofctl_rest"
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Any advice would be welcome. I am obviously going to see
what I can find here and will let you know if I find anything relevant.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Cheers
Douglas
On 13 June 2017 at 02:17, Iwase Yusuke <
Hi Douglas,
I checked "L2DestForwardStaticRyu.py", and it seems to
be "hacked" to run
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
app without "ryu-manager".
To start the built-in Ryu application with
"L2DestForwardStaticRyu.py",
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
how about the following?
The following appends to "ofctl_rest" app to the
argument of "manager".
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
- manager.main(args=sys.argv)
+ manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])
Thanks,
Iwase
Hi Iwase. Thank you for contacting me and apologies
for my delay in responding. I have tried what you have suggested but the
problem I have is that the L2DestForwardStaticRyu.py program is designed to
run on its own. It imports the the ryu.cmd import manager and uses the Ryu
controller but you start it by typing "|python l2DestForwardStaticRyu.py
--netfile=ExNetwithLoops1A.json" |where it imports
=ExNetWithLoops1A.Json.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
When this program is started, it automatically loads
Ryu and implements the code within this program. I am not sure how to start
the this and ryu.app.ofctl_rest at the same time. I have tried starting
them separately in different terminals but that did not work.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thank you also for the information you have sent. I
have looked at it before but I do not know how to implement this with my
custom code. I have been looking for examples but they seem to be few and
far between. Any advice as always would be greatly appreciated.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thanks again.
Douglas
On 8 June 2017 at 01:27, Iwase Yusuke <
Hi Douglas,
Excuse me for cutting in.
Just for getting flow statistics, how about
running your app and ofctl_rest
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
together as Fujimoto said.
e.g.)
$ ryu-manager your_app.py ryu.app.ofctl_rest
If you want to implement your own REST APIs on
your app, Ryu-Book is the
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
most helpful as far as I know.
(You might already be aware of this though...)
http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html>> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html>>> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html>> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
FYI, here is an sample implementation on
simple_switch_13.py for getting
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
flow statistics.
The usage of "WSGI" framework is described on
Ryu-Book.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
$ git diff
diff --git a/ryu/app/simple_switch_13.py
b/ryu/app/simple_switch_13.py
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
index 3e7c598..f33e474 100644
--- a/ryu/app/simple_switch_13.py
+++ b/ryu/app/simple_switch_13.py
@@ -13,6 +13,8 @@
# See the License for the specific language
governing permissions and
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
# limitations under the License.
+import json
+
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import
CONFIG_DISPATCHER, MAIN_DISPATCHER
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
@@ -21,14 +23,26 @@ from ryu.ofproto import
ofproto_v1_3
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
from ryu.lib.packet import packet
from ryu.lib.packet import ethernet
from ryu.lib.packet import ether_types
+from ryu.app.ofctl import api as ofctl_api
+from ryu.app.wsgi import ControllerBase
+from ryu.app.wsgi import Response
+from ryu.app.wsgi import route
+from ryu.app.wsgi import WSGIApplication
+
+
+_URI_PREFIX = '/simpleswitch/stats/{dpid}'
OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
+ _CONTEXTS = {'wsgi': WSGIApplication}
super(SimpleSwitch13,
self).__init__(*args, **kwargs)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
self.mac_to_port = {}
+ wsgi = kwargs['wsgi']
+ wsgi.register(SimpleSwitchController,
self})
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
@set_ev_cls(ofp_event.EventOFPSwitchFeatures,
CONFIG_DISPATCHER)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
@@ -117,3 +131,32 @@ class
out = parser.OFPPacketOut(datapath=datapath,
buffer_id=msg.buffer_id,
in_port=in_port, actions=actions, data=data)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
datapath.send_msg(out)
+
+ datapath = ofctl_api.get_datapath(self,
dpid)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+ return None
+
+ parser = datapath.ofproto_parser
+ req = parser.OFPFlowStatsRequest(
datapath)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+
+ rep = ofctl_api.send_msg(
+ app=self, msg=req,
+ reply_cls=parser.OFPFlowStatsReply,
reply_multi=True)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+ return [r.to_jsondict() for r in rep]
+
+
+
+ super(SimpleSwitchController,
self).__init__(req, link, data, **config)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+ self.simple_switch_app =
data[SimpleSwitch13.__name__]
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+
methods=['GET'])
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+ dpid = int(str(kwargs['dpid']))
+ ret = self.simple_switch_app.get_
flow_stats(dpid)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+ return Response(status=404)
+
+ return Response(content_type='application/json',
body=json.dumps(ret))
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
$ ryu-manager ryu/app/simple_switch_13.py
Registered VCS backend: git
Registered VCS backend: hg
Registered VCS backend: svn
Registered VCS backend: bzr
loading app ryu/app/simple_switch_13.py
loading app ryu.controller.ofp_handler
loading app ryu.app.ofctl.service
loading app ryu.controller.ofp_handler
creating context wsgi
instantiating app ryu.app.ofctl.service of
OfctlService
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
instantiating app ryu/app/simple_switch_13.py of
SimpleSwitch13
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
instantiating app ryu.controller.ofp_handler of
OFPHandler
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
(10332) wsgi starting up on http://0.0.0.0:8080
...
$ curl -X GET http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/
simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/
simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/
simpleswitch/stats/1>>>> | python -m json.tool
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
[
{
"OFPFlowStatsReply": {
"body": [
{
"OFPFlowStats": {
"byte_count": 140,
"cookie": 0,
"duration_nsec": 771000000,
"duration_sec": 1,
"flags": 0,
"hard_timeout": 0,
"idle_timeout": 0,
"instructions": [
{
"OFPInstructionActions": {
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
"actions": [
{
"OFPActionOutput": {
"len": 16,
"max_len": 65535,
"port": 4294967293,
"type": 0
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
}
}
],
"len": 24,
"type": 4
}
}
],
"length": 80,
"match": {
"OFPMatch": {
"length": 4,
"oxm_fields": [],
"type": 1
}
},
"packet_count": 2,
"priority": 0,
"table_id": 0
}
}
],
"flags": 0,
"type": 1
}
}
]
Thanks,
Iwase
Post by Douglas Harewood-Gill
Hi there. That is fantastic. Sounds exactly like
what I am looking for so thank you.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
One last question for the minute. I know you
provided a link but how do you implement this with custom Ryu controller
code?
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
My apologies if I am asking something really
obvious.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Cheers
Douglas
On 7 June 2017 at 01:15, Fujimoto Satoshi <
Hi, Douglas
Ryu has ofctl_rest.py, which is a sample
application and provides REST API to get flow statistics.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html>>> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html>>>>
Post by Douglas Harewood-Gill
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I think it is better to use ofctl_rest.py
than to implement your own REST API in your app.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thanks,
Fujimoto
On 2017幎06月06日 21:18, Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Greetings I am a PhD student new to both
Python and Ryu and I was wondering if anyone could give me some advice.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I am using the Ryu controller program
(L2DestForwardStaticRyu.py) provided by Dr Grey Bernstein (
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu>> <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu> <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu>>>> <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu> <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu>> <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>>>>) for
shortest path computation for a full Mesh network in Mininet but the
example provided does not include REST which I require to be able to
collect flow statistics such as the flows in each router,
Post by Douglas Harewood-Gill
bandwidth, latency, etc.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Unfortunately I have been looking and with
the exception of (https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>
Post by Douglas Harewood-Gill
<https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>) which seems
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
overly specific, I am unable to find a good example that would
allow me to work out how to integrate REST into the above Ryu control
program.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
So if anyone can point me in the right
direction or can provide some examples, I would be most grateful.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thank you for your time.
Best Regards
Douglas
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD),
University of Bristol
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers'
Building, Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------
------------------------------------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one
of the world's most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org!
http://sdm.link/slashdot
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
______________________________
_________________
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Ryu-devel mailing list
https://lists.sourceforge.net/
lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>>>>
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University
of Bristol
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers'
Building, Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------
------------------------------------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of
the world's most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org!
http://sdm.link/slashdot
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/
lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of
Bristol
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building,
Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------
------------------------------------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the
world's most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org!
http://sdm.link/slashdot
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building,
Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's
most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland
Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
sourceforge.net>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
e-mail: douglas.harewood-***@bristol.ac.uk


*CDT Communications*

University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB

http://www.bristol.ac.uk/
Iwase Yusuke
2017-06-21 00:30:26 UTC
Permalink
Hi Douglas,
Hi again. Apologies for the delay in responding and thank you for getting back to me so quickly.
I finally figured out what you were telling me. So, below is what I found for each step of the first thing you suggested.
After using "Python #" to enter the interactive interpreter I typed "import ryu" and I received no errors, it just went to a new line with this ">>>".
For "ryu.version", it told me my version is 4.12.
For "ryu.app import ofctl_rest", and I I received no errors, it just went to a new line with this ">>>".
Good, it seems Ryu is installed as expected.
Then, it is weired to show the following "AttributeError"...
AttributeError: 'module' object has not attribute "ofctl_rest"

"manager.main(args=['ryu.app.ofctl_rest'] + sys.argv)" will try to load "ofctl_rest"
from "ryu.app", but "ryu.app import ofctl_rest" does not return any error...

Thanks,
Iwase
Cheers
Douglas
Hi Douglas,
Hello again. Ok, My apologies bit I really need you to simplify this for me. Starting with the first bit.
1) Ryu is definitely installed but do you know the command to check the version? I have looked online but I can't find anything specific.
2) Is there also a way to check that Ryu is installed correctly?
3) What do you mean by "import ryu" and "ryu.version"?
4) Also, "from ryu.app import ofctl_rest"?
The commands I wrote on the previous mail can check these points.
"python" command on your shell starts Python interpreter with "Interactive Mode"
https://docs.python.org/2/tutorial/interpreter.html#interactive-mode <https://docs.python.org/2/tutorial/interpreter.html#interactive-mode>
"import ryu" and followed by other words are command (source code) for Python
interactive interpreter.
- "import ryu" checks whether Ryu is installed correctly or not.
- "ryu.version" shows version (e.g., '4.14').
- "from ryu.app import ofctl_rest" checks whether "ofctl_rest" can be imported
from your Python or not.
$ python # start Python interactive interpreter
import ryu # checks if "ryu" is installed or not
ryu.version # show version info
'4.14'
from ryu.app import ofctl_rest # Can import "ofctl_rest"?
Thanks,
Iwase
I will see if I can work through this first to see if I can get it working this way before I look at the second bit. :D
Thank you for your time and patience so far.
Cheers
Douglas
Hi Douglas,
Hi Iwase. I did try it the other way but the error "AttributeError: 'module' object has not attribute "ofctl_rest" but it was worth trying so thank you.
Hmmm... 'ryu.app.ofctl_rest' means the Python module path to Ryu's built-in app.
If it got AttributeError, Ryu might not be installed successfully.
I recommend you to confirm Ryu is installed
$ python
import ryu # Can import "ryu"?
ryu.version # Which version?
'4.14'
from ryu.app import ofctl_rest # Can import "ofctl_rest"?
Regarding the instructions you sent me for altering Ryu, is there any chance you could explain them a bit more please? I am having a little trouble following them currently.
Sure.
Ryu defines the CLI options in some modules, the most accessible among them is
"ryu/flags.py", I guess.
https://github.com/osrg/ryu/blob/master/ryu/flags.py <https://github.com/osrg/ryu/blob/master/ryu/flags.py> <https://github.com/osrg/ryu/blob/master/ryu/flags.py <https://github.com/osrg/ryu/blob/master/ryu/flags.py>>
But to reflect your changes, you need to "re-install" Ryu before running your
applications.
So If you want to define your own CLI option,
0. Checkout Ryu Git src (if needed).
$ git clone https://github.com/osrg/ryu.git <https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git <https://github.com/osrg/ryu.git>>
$ cd ryu
1. Add your definitions into "ryu/flags.py".
The syntax is the same as "oslo.config".
https://docs.openstack.org/developer/oslo.config/ <https://docs.openstack.org/developer/oslo.config/> <https://docs.openstack.org/developer/oslo.config/ <https://docs.openstack.org/developer/oslo.config/>>
2. Re-install Ryu at the top of Ryu directory.
$ pip install -r tools/pip-requires
$ python setup.py install
3. Confirm your own option is inserted into ryu-manager.
$ ryu-manager --help
Thanks,
Iwase
Thank you :)
Douglas
Hi Douglas,
Hmmm... how about swapping the order of arguments?
e.g)
manager.main(args=['ryu.app.ofctl_rest'] + sys.argv)
FYI, I guess Dr.Bernstein did "hack"(used "ryu.cmd.manager" directly) in order to
add original CLI option like "--netfile" and "--widest_paths".
On the other hand, you can add your original CLI option as following.
$ git diff
diff --git a/ryu/flags.py b/ryu/flags.py
index 69eb3d2..ebf16c8 100644
--- a/ryu/flags.py
+++ b/ryu/flags.py
@@ -112,3 +112,10 @@ CONF.register_cli_opts([
help='Initial Router ID used by Zebra protocol service '
'(default: %s)' % DEFAULT_ZSERV_ROUTER_ID),
], group='zapi')
+
+CONF.register_cli_opts([
+ cfg.StrOpt(
+ 'netfile', default=None, help='network json file'),
+ cfg.BoolOpt(
+ 'widest_paths', default=False, help='Use widest path.'),
+])
Please note you need to re-install Ryu after the above modifications.
$ python setup.py install
Then, with this modification, you can run "l2DestForwardStaticRyu.py" as the
$ ryu-manager --help
...(snip)...
--netfile NETFILE network json file
...(snip)...
--widest_paths Use widest path.
...(snip)...
$ ryu-manager l2DestForwardStaticRyu.py ryu.app.ofctl_rest --netfile=ExNetwithLoops1A.json --widest_paths
Thanks,
Iwase
Hi Iwase and thank you for getting back to me. The author of this program, Dr Bernstein added this line "from ryu.cmd import manager" which as far as I understand directly starts Ryu from within side L2DestForwardStaticRyu.py. Should be around line 29 I think. He had to do this he told me because he could not start the program in the conventional way because he needed to import the "ExNetwithLoops!A.json file" for the topology with static mac and IP addresses. Apparently he could not do this just using the standard Ryu format of starting the Ryu Manager with the Controller file and then with REST.
I tried your suggestion by removing "manager.main(args=sys.argv)"
from " if __name__ == "__main__": "
and using the following:-
"manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])" and I got the following error message in the terminal.
"l2DestForwardStaticRyuNS: error: unrecognized arguments: ryu.app.ofctl_rest"
Any advice would be welcome. I am obviously going to see what I can find here and will let you know if I find anything relevant.
Cheers
Douglas
Hi Douglas,
I checked "L2DestForwardStaticRyu.py", and it seems to be "hacked" to run
app without "ryu-manager".
To start the built-in Ryu application with "L2DestForwardStaticRyu.py",
how about the following?
The following appends to "ofctl_rest" app to the argument of "manager".
- manager.main(args=sys.argv)
+ manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])
Thanks,
Iwase
Hi Iwase. Thank you for contacting me and apologies for my delay in responding. I have tried what you have suggested but the problem I have is that the L2DestForwardStaticRyu.py program is designed to run on its own. It imports the the ryu.cmd import manager and uses the Ryu controller but you start it by typing "|python l2DestForwardStaticRyu.py --netfile=ExNetwithLoops1A.json" |where it imports =ExNetWithLoops1A.Json.
When this program is started, it automatically loads Ryu and implements the code within this program. I am not sure how to start the this and ryu.app.ofctl_rest at the same time. I have tried starting them separately in different terminals but that did not work.
Thank you also for the information you have sent. I have looked at it before but I do not know how to implement this with my custom code. I have been looking for examples but they seem to be few and far between. Any advice as always would be greatly appreciated.
Thanks again.
Douglas
Hi Douglas,
Excuse me for cutting in.
Just for getting flow statistics, how about running your app and ofctl_rest
together as Fujimoto said.
e.g.)
$ ryu-manager your_app.py ryu.app.ofctl_rest
If you want to implement your own REST APIs on your app, Ryu-Book is the
most helpful as far as I know.
(You might already be aware of this though...)
http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>>>> <http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>
FYI, here is an sample implementation on simple_switch_13.py for getting
flow statistics.
The usage of "WSGI" framework is described on Ryu-Book.
$ git diff
diff --git a/ryu/app/simple_switch_13.py b/ryu/app/simple_switch_13.py
index 3e7c598..f33e474 100644
--- a/ryu/app/simple_switch_13.py
+++ b/ryu/app/simple_switch_13.py
@@ -13,6 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import json
+
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER
@@ -21,14 +23,26 @@ from ryu.ofproto import ofproto_v1_3
from ryu.lib.packet import packet
from ryu.lib.packet import ethernet
from ryu.lib.packet import ether_types
+from ryu.app.ofctl import api as ofctl_api
+from ryu.app.wsgi import ControllerBase
+from ryu.app.wsgi import Response
+from ryu.app.wsgi import route
+from ryu.app.wsgi import WSGIApplication
+
+
+_URI_PREFIX = '/simpleswitch/stats/{dpid}'
OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
+ _CONTEXTS = {'wsgi': WSGIApplication}
super(SimpleSwitch13, self).__init__(*args, **kwargs)
self.mac_to_port = {}
+ wsgi = kwargs['wsgi']
+ wsgi.register(SimpleSwitchController,
+ {SimpleSwitch13.__name__: self})
@set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
out = parser.OFPPacketOut(datapath=datapath, buffer_id=msg.buffer_id,
in_port=in_port, actions=actions, data=data)
datapath.send_msg(out)
+
+ datapath = ofctl_api.get_datapath(self, dpid)
+ return None
+
+ parser = datapath.ofproto_parser
+ req = parser.OFPFlowStatsRequest(datapath)
+
+ rep = ofctl_api.send_msg(
+ app=self, msg=req,
+ reply_cls=parser.OFPFlowStatsReply, reply_multi=True)
+ return [r.to_jsondict() for r in rep]
+
+
+
+ super(SimpleSwitchController, self).__init__(req, link, data, **config)
+ self.simple_switch_app = data[SimpleSwitch13.__name__]
+
+ dpid = int(str(kwargs['dpid']))
+ ret = self.simple_switch_app.get_flow_stats(dpid)
+ return Response(status=404)
+
+ return Response(content_type='application/json', body=json.dumps(ret))
$ ryu-manager ryu/app/simple_switch_13.py
Registered VCS backend: git
Registered VCS backend: hg
Registered VCS backend: svn
Registered VCS backend: bzr
loading app ryu/app/simple_switch_13.py
loading app ryu.controller.ofp_handler
loading app ryu.app.ofctl.service
loading app ryu.controller.ofp_handler
creating context wsgi
instantiating app ryu.app.ofctl.service of OfctlService
instantiating app ryu/app/simple_switch_13.py of SimpleSwitch13
instantiating app ryu.controller.ofp_handler of OFPHandler
(10332) wsgi starting up on http://0.0.0.0:8080
...
$ curl -X GET http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>>>> | python -m json.tool
[
{
"OFPFlowStatsReply": {
"body": [
{
"OFPFlowStats": {
"byte_count": 140,
"cookie": 0,
"duration_nsec": 771000000,
"duration_sec": 1,
"flags": 0,
"hard_timeout": 0,
"idle_timeout": 0,
"instructions": [
{
"OFPInstructionActions": {
"actions": [
{
"OFPActionOutput": {
"len": 16,
"max_len": 65535,
"port": 4294967293,
"type": 0
}
}
],
"len": 24,
"type": 4
}
}
],
"length": 80,
"match": {
"OFPMatch": {
"length": 4,
"oxm_fields": [],
"type": 1
}
},
"packet_count": 2,
"priority": 0,
"table_id": 0
}
}
],
"flags": 0,
"type": 1
}
}
]
Thanks,
Iwase
Hi there. That is fantastic. Sounds exactly like what I am looking for so thank you.
One last question for the minute. I know you provided a link but how do you implement this with custom Ryu controller code?
My apologies if I am asking something really obvious.
Cheers
Douglas
Hi, Douglas
Ryu has ofctl_rest.py, which is a sample application and provides REST API to get flow statistics.
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>>>
I think it is better to use ofctl_rest.py than to implement your own REST API in your app.
Thanks,
Fujimoto
Greetings I am a PhD student new to both Python and Ryu and I was wondering if anyone could give me some advice.
I am using the Ryu controller program (L2DestForwardStaticRyu.py) provided by Dr Grey Bernstein (https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>>>) for shortest path computation for a full Mesh network in Mininet but the example provided does not include REST which I require to be able to collect flow statistics such as the flows in each router,
bandwidth, latency, etc.
Unfortunately I have been looking and with the exception of (https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>>) which seems
overly specific, I am unable to find a good example that would allow me to work out how to integrate REST into the above Ryu control program.
So if anyone can point me in the right direction or can provide some examples, I would be most grateful.
Thank you for your time.
Best Regards
Douglas
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
Douglas Harewood-Gill
2017-06-21 14:11:53 UTC
Permalink
Hi again. Ok, can you talk me through the second part, lets try that and
see what happens. Assuming of course it is still relevant after what we
have already tried.

"So If you want to define your own CLI option,
Post by Iwase Yusuke
Post by Iwase Yusuke
0. Checkout Ryu Git src (if needed).
$ git clone https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git>>
Post by Iwase Yusuke
Post by Iwase Yusuke
$ cd ryu
1. Add your definitions into "ryu/flags.py".
The syntax is the same as "oslo.config".
https://docs.openstack.org/developer/oslo.config/ <
https://docs.openstack.org/developer/oslo.config/> <
https://docs.openstack.org/developer/oslo.config/ <
https://docs.openstack.org/developer/oslo.config/>>
Post by Iwase Yusuke
Post by Iwase Yusuke
2. Re-install Ryu at the top of Ryu directory.
$ pip install -r tools/pip-requires
$ python setup.py install
3. Confirm your own option is inserted into ryu-manager.
$ ryu-manager --help"
Cheers

Douglas
Post by Iwase Yusuke
Hi Douglas,
Post by Iwase Yusuke
Hi again. Apologies for the delay in responding and thank you for
getting back to me so quickly.
Post by Iwase Yusuke
I finally figured out what you were telling me. So, below is what I
found for each step of the first thing you suggested.
Post by Iwase Yusuke
After using "Python #" to enter the interactive interpreter I typed
"import ryu" and I received no errors, it just went to a new line with this
">>>".
Post by Iwase Yusuke
For "ryu.version", it told me my version is 4.12.
For "ryu.app import ofctl_rest", and I I received no errors, it just
went to a new line with this ">>>".
Good, it seems Ryu is installed as expected.
Then, it is weired to show the following "AttributeError"...
AttributeError: 'module' object has not attribute "ofctl_rest"
"manager.main(args=['ryu.app.ofctl_rest'] + sys.argv)" will try to load "ofctl_rest"
from "ryu.app", but "ryu.app import ofctl_rest" does not return any error...
Thanks,
Iwase
Post by Iwase Yusuke
Cheers
Douglas
Hi Douglas,
Post by Douglas Harewood-Gill
Hello again. Ok, My apologies bit I really need you to simplify
this for me. Starting with the first bit.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
1) Ryu is definitely installed but do you know the command to
check the version? I have looked online but I can't find anything specific.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
2) Is there also a way to check that Ryu is installed correctly?
3) What do you mean by "import ryu" and "ryu.version"?
4) Also, "from ryu.app import ofctl_rest"?
The commands I wrote on the previous mail can check these points.
"python" command on your shell starts Python interpreter with
"Interactive Mode"
Post by Iwase Yusuke
https://docs.python.org/2/tutorial/interpreter.html#
interactive-mode <https://docs.python.org/2/tutorial/interpreter.html#
interactive-mode>
Post by Iwase Yusuke
"import ryu" and followed by other words are command (source code)
for Python
Post by Iwase Yusuke
interactive interpreter.
- "import ryu" checks whether Ryu is installed correctly or not.
- "ryu.version" shows version (e.g., '4.14').
- "from ryu.app import ofctl_rest" checks whether "ofctl_rest" can
be imported
Post by Iwase Yusuke
from your Python or not.
$ python # start Python interactive interpreter
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
import ryu # checks if "ryu" is installed or not
ryu.version # show version info
'4.14'
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
from ryu.app import ofctl_rest # Can import "ofctl_rest"?
Thanks,
Iwase
Post by Douglas Harewood-Gill
I will see if I can work through this first to see if I can get it
working this way before I look at the second bit. :D
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Thank you for your time and patience so far.
Cheers
Douglas
Hi Douglas,
Post by Douglas Harewood-Gill
Hi Iwase. I did try it the other way but the error
"AttributeError: 'module' object has not attribute "ofctl_rest" but it was
worth trying so thank you.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Hmmm... 'ryu.app.ofctl_rest' means the Python module path to
Ryu's built-in app.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
If it got AttributeError, Ryu might not be installed
successfully.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
I recommend you to confirm Ryu is installed
$ python
Post by Douglas Harewood-Gill
import ryu # Can import "ryu"?
ryu.version # Which version?
'4.14'
Post by Douglas Harewood-Gill
from ryu.app import ofctl_rest # Can import "ofctl_rest"?
Regarding the instructions you sent me for altering Ryu, is
there any chance you could explain them a bit more please? I am having a
little trouble following them currently.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Sure.
Ryu defines the CLI options in some modules, the most
accessible among them is
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
"ryu/flags.py", I guess.
https://github.com/osrg/ryu/blob/master/ryu/flags.py <
https://github.com/osrg/ryu/blob/master/ryu/flags.py> <
https://github.com/osrg/ryu/blob/master/ryu/flags.py <
https://github.com/osrg/ryu/blob/master/ryu/flags.py>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
But to reflect your changes, you need to "re-install" Ryu
before running your
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
applications.
So If you want to define your own CLI option,
0. Checkout Ryu Git src (if needed).
$ git clone https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
$ cd ryu
1. Add your definitions into "ryu/flags.py".
The syntax is the same as "oslo.config".
https://docs.openstack.org/developer/oslo.config/ <
https://docs.openstack.org/developer/oslo.config/> <
https://docs.openstack.org/developer/oslo.config/ <
https://docs.openstack.org/developer/oslo.config/>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
2. Re-install Ryu at the top of Ryu directory.
$ pip install -r tools/pip-requires
$ python setup.py install
3. Confirm your own option is inserted into ryu-manager.
$ ryu-manager --help
Thanks,
Iwase
Post by Douglas Harewood-Gill
Thank you :)
Douglas
On 14 June 2017 at 03:24, Iwase Yusuke <
Hi Douglas,
Hmmm... how about swapping the order of arguments?
e.g)
manager.main(args=['ryu.app.ofctl_rest'] + sys.argv)
FYI, I guess Dr.Bernstein did "hack"(used
"ryu.cmd.manager" directly) in order to
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
add original CLI option like "--netfile" and
"--widest_paths".
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
On the other hand, you can add your original CLI option
as following.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
$ git diff
diff --git a/ryu/flags.py b/ryu/flags.py
index 69eb3d2..ebf16c8 100644
--- a/ryu/flags.py
+++ b/ryu/flags.py
@@ -112,3 +112,10 @@ CONF.register_cli_opts([
help='Initial Router ID used by Zebra protocol
service '
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
'(default: %s)' % DEFAULT_ZSERV_ROUTER_ID),
], group='zapi')
+
+CONF.register_cli_opts([
+ cfg.StrOpt(
+ 'netfile', default=None, help='network json
file'),
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+ cfg.BoolOpt(
+ 'widest_paths', default=False, help='Use widest
path.'),
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+])
Please note you need to re-install Ryu after the above
modifications.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
$ python setup.py install
Then, with this modification, you can run
"l2DestForwardStaticRyu.py" as the
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
$ ryu-manager --help
...(snip)...
--netfile NETFILE network json file
...(snip)...
--widest_paths Use widest path.
...(snip)...
$ ryu-manager l2DestForwardStaticRyu.py
ryu.app.ofctl_rest --netfile=ExNetwithLoops1A.json --widest_paths
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thanks,
Iwase
Hi Iwase and thank you for getting back to me. The
author of this program, Dr Bernstein added this line "from ryu.cmd import
manager" which as far as I understand directly starts Ryu from within side
L2DestForwardStaticRyu.py. Should be around line 29 I think. He had to do
this he told me because he could not start the program in the conventional
way because he needed to import the "ExNetwithLoops!A.json file" for the
topology with static mac and IP addresses. Apparently he could not do this
just using the standard Ryu format of starting the Ryu Manager with the
Controller file and then with REST.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I tried your suggestion by removing
"manager.main(args=sys.argv)"
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
from " if __name__ == "__main__": "
and using the following:-
"manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])"
and I got the following error message in the terminal.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
"l2DestForwardStaticRyuNS: error: unrecognized
arguments: ryu.app.ofctl_rest"
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Any advice would be welcome. I am obviously going to
see what I can find here and will let you know if I find anything relevant.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Cheers
Douglas
On 13 June 2017 at 02:17, Iwase Yusuke <
Hi Douglas,
I checked "L2DestForwardStaticRyu.py", and it
seems to be "hacked" to run
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
app without "ryu-manager".
To start the built-in Ryu application with
"L2DestForwardStaticRyu.py",
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
how about the following?
The following appends to "ofctl_rest" app to the
argument of "manager".
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
- manager.main(args=sys.argv)
+ manager.main(args=sys.argv +
['ryu.app.ofctl_rest'])
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thanks,
Iwase
Hi Iwase. Thank you for contacting me and
apologies for my delay in responding. I have tried what you have suggested
but the problem I have is that the L2DestForwardStaticRyu.py program is
designed to run on its own. It imports the the ryu.cmd import manager and
uses the Ryu controller but you start it by typing "|python
l2DestForwardStaticRyu.py --netfile=ExNetwithLoops1A.json" |where it
imports =ExNetWithLoops1A.Json.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
When this program is started, it automatically
loads Ryu and implements the code within this program. I am not sure how to
start the this and ryu.app.ofctl_rest at the same time. I have tried
starting them separately in different terminals but that did not work.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thank you also for the information you have
sent. I have looked at it before but I do not know how to implement this
with my custom code. I have been looking for examples but they seem to be
few and far between. Any advice as always would be greatly appreciated.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thanks again.
Douglas
On 8 June 2017 at 01:27, Iwase Yusuke <
Hi Douglas,
Excuse me for cutting in.
Just for getting flow statistics, how about
running your app and ofctl_rest
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
together as Fujimoto said.
e.g.)
$ ryu-manager your_app.py ryu.app.ofctl_rest
If you want to implement your own REST APIs
on your app, Ryu-Book is the
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
most helpful as far as I know.
(You might already be aware of this
though...)
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html>> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html>>> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html>> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html>>>> <http://osrg.github.io/ryu-
book/en/html/rest_api.html
Post by Iwase Yusuke
<http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
FYI, here is an sample implementation on
simple_switch_13.py for getting
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
flow statistics.
The usage of "WSGI" framework is described
on Ryu-Book.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
$ git diff
diff --git a/ryu/app/simple_switch_13.py
b/ryu/app/simple_switch_13.py
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
index 3e7c598..f33e474 100644
--- a/ryu/app/simple_switch_13.py
+++ b/ryu/app/simple_switch_13.py
@@ -13,6 +13,8 @@
# See the License for the specific language
governing permissions and
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
# limitations under the License.
+import json
+
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import
CONFIG_DISPATCHER, MAIN_DISPATCHER
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
@@ -21,14 +23,26 @@ from ryu.ofproto import
ofproto_v1_3
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
from ryu.lib.packet import packet
from ryu.lib.packet import ethernet
from ryu.lib.packet import ether_types
+from ryu.app.ofctl import api as ofctl_api
+from ryu.app.wsgi import ControllerBase
+from ryu.app.wsgi import Response
+from ryu.app.wsgi import route
+from ryu.app.wsgi import WSGIApplication
+
+
+_URI_PREFIX = '/simpleswitch/stats/{dpid}'
OFP_VERSIONS =
[ofproto_v1_3.OFP_VERSION]
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+ _CONTEXTS = {'wsgi': WSGIApplication}
super(SimpleSwitch13,
self).__init__(*args, **kwargs)
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
self.mac_to_port = {}
+ wsgi = kwargs['wsgi']
+ wsgi.register(
SimpleSwitchController,
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+
{SimpleSwitch13.__name__: self})
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
@set_ev_cls(ofp_event.EventOFPSwitchFeatures,
CONFIG_DISPATCHER)
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
@@ -117,3 +131,32 @@ class
out = parser.OFPPacketOut(datapath=datapath,
buffer_id=msg.buffer_id,
in_port=in_port, actions=actions, data=data)
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
datapath.send_msg(out)
+
+ datapath =
ofctl_api.get_datapath(self, dpid)
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+ return None
+
+ parser = datapath.ofproto_parser
+ req = parser.OFPFlowStatsRequest(
datapath)
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+
+ rep = ofctl_api.send_msg(
+ app=self, msg=req,
+ reply_cls=parser.OFPFlowStatsReply,
reply_multi=True)
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+ return [r.to_jsondict() for r in
rep]
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+
+
+class SimpleSwitchController(
+
+ def __init__(self, req, link, data,
+ super(SimpleSwitchController,
self).__init__(req, link, data, **config)
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+ self.simple_switch_app =
data[SimpleSwitch13.__name__]
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+
methods=['GET'])
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+ dpid = int(str(kwargs['dpid']))
+ ret = self.simple_switch_app.get_
flow_stats(dpid)
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
+ return Response(status=404)
+
+ return Response(content_type='application/json',
body=json.dumps(ret))
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
$ ryu-manager ryu/app/simple_switch_13.py
Registered VCS backend: git
Registered VCS backend: hg
Registered VCS backend: svn
Registered VCS backend: bzr
loading app ryu/app/simple_switch_13.py
loading app ryu.controller.ofp_handler
loading app ryu.app.ofctl.service
loading app ryu.controller.ofp_handler
creating context wsgi
instantiating app ryu.app.ofctl.service of
OfctlService
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
instantiating app
ryu/app/simple_switch_13.py of SimpleSwitch13
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
instantiating app ryu.controller.ofp_handler
of OFPHandler
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
(10332) wsgi starting up on
http://0.0.0.0:8080
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
...
$ curl -X GET http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/
simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/
simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/
simpleswitch/stats/1>>>> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> <
http://localhost:8080/simpleswitch/stats/1
Post by Iwase Yusuke
<http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/
simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/
simpleswitch/stats/1>>>>> | python -m json.tool
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
[
{
"OFPFlowStatsReply": {
"body": [
{
"OFPFlowStats": {
"byte_count": 140,
"cookie": 0,
771000000,
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
"duration_sec": 1,
"flags": 0,
"hard_timeout": 0,
"idle_timeout": 0,
"instructions": [
{
"OFPInstructionActions": {
"actions": [
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
{
"OFPActionOutput": {
"len": 16,
"max_len": 65535,
"port": 4294967293,
"type": 0
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
}
}
],
24,
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
"type": 4
}
}
],
"length": 80,
"match": {
"OFPMatch": {
"length": 4,
"oxm_fields": [],
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
"type": 1
}
},
"packet_count": 2,
"priority": 0,
"table_id": 0
}
}
],
"flags": 0,
"type": 1
}
}
]
Thanks,
Iwase
On 2017幎06月07日 20:21, Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Hi there. That is fantastic. Sounds
exactly like what I am looking for so thank you.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
One last question for the minute. I know
you provided a link but how do you implement this with custom Ryu
controller code?
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
My apologies if I am asking something
really obvious.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Cheers
Douglas
On 7 June 2017 at 01:15, Fujimoto Satoshi <
Hi, Douglas
Ryu has ofctl_rest.py, which is a
sample application and provides REST API to get flow statistics.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html>>> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html>>>> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html
Post by Iwase Yusuke
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
Post by Iwase Yusuke
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I think it is better to use
ofctl_rest.py than to implement your own REST API in your app.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thanks,
Fujimoto
On 2017幎06月06日 21:18, Douglas
Post by Douglas Harewood-Gill
Greetings I am a PhD student new to
both Python and Ryu and I was wondering if anyone could give me some advice.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I am using the Ryu controller program
(L2DestForwardStaticRyu.py) provided by Dr Grey Bernstein (
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>
Post by Iwase Yusuke
<https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>>>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>
Post by Iwase Yusuke
<https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>>
Post by Iwase Yusuke
<https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>>>>>) for
shortest path computation for a full Mesh network in Mininet but the
example provided does not include REST which I require to be able to
collect flow statistics such as the flows in each router,
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
bandwidth, latency, etc.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Unfortunately I have been looking and
with the exception of (https://osrg.github.io/ryu-
book/en/html/rest_api.html <https://osrg.github.io/ryu-
book/en/html/rest_api.html> <https://osrg.github.io/ryu-
book/en/html/rest_api.html <https://osrg.github.io/ryu-
book/en/html/rest_api.html>> <https://osrg.github.io/ryu-
book/en/html/rest_api.html <https://osrg.github.io/ryu-
book/en/html/rest_api.html> <https://osrg.github.io/ryu-
book/en/html/rest_api.html <https://osrg.github.io/ryu-
book/en/html/rest_api.html>>> <https://osrg.github.io/ryu-
book/en/html/rest_api.html <https://osrg.github.io/ryu-
book/en/html/rest_api.html> <https://osrg.github.io/ryu-
book/en/html/rest_api.html <https://osrg.github.io/ryu-
book/en/html/rest_api.html>> <https://osrg.github.io/ryu-
book/en/html/rest_api.html <https://osrg.github.io/ryu-
book/en/html/rest_api.html> <https://osrg.github.io/ryu-
book/en/html/rest_api.html <https://osrg.github.io/ryu-
book/en/html/rest_api.html>>>> <https://osrg.github.io/ryu-
book/en/html/rest_api.html
Post by Iwase Yusuke
<https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
<https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html
Post by Iwase Yusuke
<https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>>) which seems
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
overly specific, I am unable to find a good example that
would allow me to work out how to integrate REST into the above Ryu control
program.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
So if anyone can point me in the
right direction or can provide some examples, I would be most grateful.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thank you for your time.
Best Regards
Douglas
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD),
University of Bristol
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught and
Research)
bristol.ac.uk>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
*
CDT Communications*
University of Bristol, Merchant
Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------
------------------------------------------------
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community
on one of the world's most
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org!
http://sdm.link/slashdot
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
______________________________
_________________
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Ryu-devel mailing list
sourceforge.net
sourceforge.net>>>>>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
https://lists.sourceforge.net/
lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>>>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel
Post by Iwase Yusuke
<https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel
Post by Iwase Yusuke
<https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD),
University of Bristol
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught and Research)
bristol.ac.uk>
bristol.ac.uk
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
*
CDT Communications*
University of Bristol, Merchant Venturers'
Building, Woodland Road, Clifton, Bristol. BS8 1UB
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------
------------------------------------------------
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on
one of the world's most
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org!
http://sdm.link/slashdot
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
______________________________
_________________
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Ryu-devel mailing list
https://lists.sourceforge.net/
lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>>>>
Post by Iwase Yusuke
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University
of Bristol
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers'
Building, Woodland Road, Clifton, Bristol. BS8 1UB
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------
------------------------------------------------
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of
the world's most
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org!
http://sdm.link/slashdot
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/
lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>>>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of
Bristol
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building,
Woodland Road, Clifton, Bristol. BS8 1UB
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------
------------------------------------------------
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the
world's most
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org!
http://sdm.link/slashdot
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building,
Woodland Road, Clifton, Bristol. BS8 1UB
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's
most
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland
Road, Clifton, Bristol. BS8 1UB
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
sourceforge.net>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>
Post by Iwase Yusuke
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB
Post by Iwase Yusuke
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Iwase Yusuke
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
e-mail: douglas.harewood-***@bristol.ac.uk


*CDT Communications*

University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB

http://www.bristol.ac.uk/
Iwase Yusuke
2017-06-22 02:58:12 UTC
Permalink
Hi,

Thanks, we are waiting for your report.

FYI, with the following patch, "--user-flags" option for adding your own CLI options
without modification and re-installing, but please note this patch has not be merged
into upstream yet.
This feature should be included in next release on early next month, I guess.
https://sourceforge.net/p/ryu/mailman/ryu-devel/thread/1497504689-15184-2-git-send-email-iwase.yusuke0%40gmail.com/#msg35895311

Thanks,
Iwase
Hi again. Ok, can you talk me through the second part, lets try that and see what happens. Assuming of course it is still relevant after what we have already tried.
"So If you want to define your own CLI option,
Post by Iwase Yusuke
0. Checkout Ryu Git src (if needed).
$ git clone https://github.com/osrg/ryu.git <https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git <https://github.com/osrg/ryu.git>> <https://github.com/osrg/ryu.git <https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git <https://github.com/osrg/ryu.git>>>
$ cd ryu
1. Add your definitions into "ryu/flags.py".
The syntax is the same as "oslo.config".
https://docs.openstack.org/developer/oslo.config/ <https://docs.openstack.org/developer/oslo.config/> <https://docs.openstack.org/developer/oslo.config/ <https://docs.openstack.org/developer/oslo.config/>> <https://docs.openstack.org/developer/oslo.config/ <https://docs.openstack.org/developer/oslo.config/> <https://docs.openstack.org/developer/oslo.config/ <https://docs.openstack.org/developer/oslo.config/>>>
2. Re-install Ryu at the top of Ryu directory.
$ pip install -r tools/pip-requires
$ python setup.py install
3. Confirm your own option is inserted into ryu-manager.
$ ryu-manager --help"
Cheers
Douglas
Hi Douglas,
Hi again. Apologies for the delay in responding and thank you for getting back to me so quickly.
I finally figured out what you were telling me. So, below is what I found for each step of the first thing you suggested.
After using "Python #" to enter the interactive interpreter I typed "import ryu" and I received no errors, it just went to a new line with this ">>>".
For "ryu.version", it told me my version is 4.12.
For "ryu.app import ofctl_rest", and I I received no errors, it just went to a new line with this ">>>".
Good, it seems Ryu is installed as expected.
Then, it is weired to show the following "AttributeError"...
AttributeError: 'module' object has not attribute "ofctl_rest"
"manager.main(args=['ryu.app.ofctl_rest'] + sys.argv)" will try to load "ofctl_rest"
from "ryu.app", but "ryu.app import ofctl_rest" does not return any error...
Thanks,
Iwase
Cheers
Douglas
Hi Douglas,
Post by Iwase Yusuke
Hello again. Ok, My apologies bit I really need you to simplify this for me. Starting with the first bit.
1) Ryu is definitely installed but do you know the command to check the version? I have looked online but I can't find anything specific.
2) Is there also a way to check that Ryu is installed correctly?
3) What do you mean by "import ryu" and "ryu.version"?
4) Also, "from ryu.app import ofctl_rest"?
The commands I wrote on the previous mail can check these points.
"python" command on your shell starts Python interpreter with "Interactive Mode"
https://docs.python.org/2/tutorial/interpreter.html#interactive-mode <https://docs.python.org/2/tutorial/interpreter.html#interactive-mode> <https://docs.python.org/2/tutorial/interpreter.html#interactive-mode <https://docs.python.org/2/tutorial/interpreter.html#interactive-mode>>
"import ryu" and followed by other words are command (source code) for Python
interactive interpreter.
- "import ryu" checks whether Ryu is installed correctly or not.
- "ryu.version" shows version (e.g., '4.14').
- "from ryu.app import ofctl_rest" checks whether "ofctl_rest" can be imported
from your Python or not.
$ python # start Python interactive interpreter
Post by Iwase Yusuke
import ryu # checks if "ryu" is installed or not
ryu.version # show version info
'4.14'
Post by Iwase Yusuke
from ryu.app import ofctl_rest # Can import "ofctl_rest"?
Thanks,
Iwase
Post by Iwase Yusuke
I will see if I can work through this first to see if I can get it working this way before I look at the second bit. :D
Thank you for your time and patience so far.
Cheers
Douglas
Hi Douglas,
Hi Iwase. I did try it the other way but the error "AttributeError: 'module' object has not attribute "ofctl_rest" but it was worth trying so thank you.
Hmmm... 'ryu.app.ofctl_rest' means the Python module path to Ryu's built-in app.
If it got AttributeError, Ryu might not be installed successfully.
I recommend you to confirm Ryu is installed
$ python
import ryu # Can import "ryu"?
ryu.version # Which version?
'4.14'
from ryu.app import ofctl_rest # Can import "ofctl_rest"?
Regarding the instructions you sent me for altering Ryu, is there any chance you could explain them a bit more please? I am having a little trouble following them currently.
Sure.
Ryu defines the CLI options in some modules, the most accessible among them is
"ryu/flags.py", I guess.
https://github.com/osrg/ryu/blob/master/ryu/flags.py <https://github.com/osrg/ryu/blob/master/ryu/flags.py> <https://github.com/osrg/ryu/blob/master/ryu/flags.py <https://github.com/osrg/ryu/blob/master/ryu/flags.py>> <https://github.com/osrg/ryu/blob/master/ryu/flags.py <https://github.com/osrg/ryu/blob/master/ryu/flags.py> <https://github.com/osrg/ryu/blob/master/ryu/flags.py <https://github.com/osrg/ryu/blob/master/ryu/flags.py>>>
But to reflect your changes, you need to "re-install" Ryu before running your
applications.
So If you want to define your own CLI option,
0. Checkout Ryu Git src (if needed).
$ git clone https://github.com/osrg/ryu.git <https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git <https://github.com/osrg/ryu.git>> <https://github.com/osrg/ryu.git <https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git <https://github.com/osrg/ryu.git>>>
$ cd ryu
1. Add your definitions into "ryu/flags.py".
The syntax is the same as "oslo.config".
https://docs.openstack.org/developer/oslo.config/ <https://docs.openstack.org/developer/oslo.config/> <https://docs.openstack.org/developer/oslo.config/ <https://docs.openstack.org/developer/oslo.config/>> <https://docs.openstack.org/developer/oslo.config/ <https://docs.openstack.org/developer/oslo.config/> <https://docs.openstack.org/developer/oslo.config/ <https://docs.openstack.org/developer/oslo.config/>>>
2. Re-install Ryu at the top of Ryu directory.
$ pip install -r tools/pip-requires
$ python setup.py install
3. Confirm your own option is inserted into ryu-manager.
$ ryu-manager --help
Thanks,
Iwase
Thank you :)
Douglas
Hi Douglas,
Hmmm... how about swapping the order of arguments?
e.g)
manager.main(args=['ryu.app.ofctl_rest'] + sys.argv)
FYI, I guess Dr.Bernstein did "hack"(used "ryu.cmd.manager" directly) in order to
add original CLI option like "--netfile" and "--widest_paths".
On the other hand, you can add your original CLI option as following.
$ git diff
diff --git a/ryu/flags.py b/ryu/flags.py
index 69eb3d2..ebf16c8 100644
--- a/ryu/flags.py
+++ b/ryu/flags.py
@@ -112,3 +112,10 @@ CONF.register_cli_opts([
help='Initial Router ID used by Zebra protocol service '
'(default: %s)' % DEFAULT_ZSERV_ROUTER_ID),
], group='zapi')
+
+CONF.register_cli_opts([
+ cfg.StrOpt(
+ 'netfile', default=None, help='network json file'),
+ cfg.BoolOpt(
+ 'widest_paths', default=False, help='Use widest path.'),
+])
Please note you need to re-install Ryu after the above modifications.
$ python setup.py install
Then, with this modification, you can run "l2DestForwardStaticRyu.py" as the
$ ryu-manager --help
...(snip)...
--netfile NETFILE network json file
...(snip)...
--widest_paths Use widest path.
...(snip)...
$ ryu-manager l2DestForwardStaticRyu.py ryu.app.ofctl_rest --netfile=ExNetwithLoops1A.json --widest_paths
Thanks,
Iwase
Hi Iwase and thank you for getting back to me. The author of this program, Dr Bernstein added this line "from ryu.cmd import manager" which as far as I understand directly starts Ryu from within side L2DestForwardStaticRyu.py. Should be around line 29 I think. He had to do this he told me because he could not start the program in the conventional way because he needed to import the "ExNetwithLoops!A.json file" for the topology with static mac and IP addresses. Apparently he could not do this just using the standard Ryu format of starting the Ryu Manager with the Controller file and then with REST.
I tried your suggestion by removing "manager.main(args=sys.argv)"
from " if __name__ == "__main__": "
and using the following:-
"manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])" and I got the following error message in the terminal.
"l2DestForwardStaticRyuNS: error: unrecognized arguments: ryu.app.ofctl_rest"
Any advice would be welcome. I am obviously going to see what I can find here and will let you know if I find anything relevant.
Cheers
Douglas
Hi Douglas,
I checked "L2DestForwardStaticRyu.py", and it seems to be "hacked" to run
app without "ryu-manager".
To start the built-in Ryu application with "L2DestForwardStaticRyu.py",
how about the following?
The following appends to "ofctl_rest" app to the argument of "manager".
- manager.main(args=sys.argv)
+ manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])
Thanks,
Iwase
Hi Iwase. Thank you for contacting me and apologies for my delay in responding. I have tried what you have suggested but the problem I have is that the L2DestForwardStaticRyu.py program is designed to run on its own. It imports the the ryu.cmd import manager and uses the Ryu controller but you start it by typing "|python l2DestForwardStaticRyu.py --netfile=ExNetwithLoops1A.json" |where it imports =ExNetWithLoops1A.Json.
When this program is started, it automatically loads Ryu and implements the code within this program. I am not sure how to start the this and ryu.app.ofctl_rest at the same time. I have tried starting them separately in different terminals but that did not work.
Thank you also for the information you have sent. I have looked at it before but I do not know how to implement this with my custom code. I have been looking for examples but they seem to be few and far between. Any advice as always would be greatly appreciated.
Thanks again.
Douglas
Hi Douglas,
Excuse me for cutting in.
Just for getting flow statistics, how about running your app and ofctl_rest
together as Fujimoto said.
e.g.)
$ ryu-manager your_app.py ryu.app.ofctl_rest
If you want to implement your own REST APIs on your app, Ryu-Book is the
most helpful as far as I know.
(You might already be aware of this though...)
http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>>>> <http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>>>>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>>>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html> <http://osrg.github.io/ryu-book/en/html/rest_api.html <http://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>>
Post by Iwase Yusuke
FYI, here is an sample implementation on simple_switch_13.py for getting
flow statistics.
The usage of "WSGI" framework is described on Ryu-Book.
$ git diff
diff --git a/ryu/app/simple_switch_13.py b/ryu/app/simple_switch_13.py
index 3e7c598..f33e474 100644
--- a/ryu/app/simple_switch_13.py
+++ b/ryu/app/simple_switch_13.py
@@ -13,6 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import json
+
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER
@@ -21,14 +23,26 @@ from ryu.ofproto import ofproto_v1_3
from ryu.lib.packet import packet
from ryu.lib.packet import ethernet
from ryu.lib.packet import ether_types
+from ryu.app.ofctl import api as ofctl_api
+from ryu.app.wsgi import ControllerBase
+from ryu.app.wsgi import Response
+from ryu.app.wsgi import route
+from ryu.app.wsgi import WSGIApplication
+
+
+_URI_PREFIX = '/simpleswitch/stats/{dpid}'
OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
+ _CONTEXTS = {'wsgi': WSGIApplication}
super(SimpleSwitch13, self).__init__(*args, **kwargs)
self.mac_to_port = {}
+ wsgi = kwargs['wsgi']
+ wsgi.register(SimpleSwitchController,
+ {SimpleSwitch13.__name__: self})
@set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
out = parser.OFPPacketOut(datapath=datapath, buffer_id=msg.buffer_id,
in_port=in_port, actions=actions, data=data)
datapath.send_msg(out)
+
+ datapath = ofctl_api.get_datapath(self, dpid)
+ return None
+
+ parser = datapath.ofproto_parser
+ req = parser.OFPFlowStatsRequest(datapath)
+
+ rep = ofctl_api.send_msg(
+ app=self, msg=req,
+ reply_cls=parser.OFPFlowStatsReply, reply_multi=True)
+ return [r.to_jsondict() for r in rep]
+
+
+
+ super(SimpleSwitchController, self).__init__(req, link, data, **config)
+ self.simple_switch_app = data[SimpleSwitch13.__name__]
+
+ dpid = int(str(kwargs['dpid']))
+ ret = self.simple_switch_app.get_flow_stats(dpid)
+ return Response(status=404)
+
+ return Response(content_type='application/json', body=json.dumps(ret))
$ ryu-manager ryu/app/simple_switch_13.py
Registered VCS backend: git
Registered VCS backend: hg
Registered VCS backend: svn
Registered VCS backend: bzr
loading app ryu/app/simple_switch_13.py
loading app ryu.controller.ofp_handler
loading app ryu.app.ofctl.service
loading app ryu.controller.ofp_handler
creating context wsgi
instantiating app ryu.app.ofctl.service of OfctlService
instantiating app ryu/app/simple_switch_13.py of SimpleSwitch13
instantiating app ryu.controller.ofp_handler of OFPHandler
(10332) wsgi starting up on http://0.0.0.0:8080
...
$ curl -X GET http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>>>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1>>>>>> | python -m json.tool
Post by Iwase Yusuke
[
{
"OFPFlowStatsReply": {
"body": [
{
"OFPFlowStats": {
"byte_count": 140,
"cookie": 0,
"duration_nsec": 771000000,
"duration_sec": 1,
"flags": 0,
"hard_timeout": 0,
"idle_timeout": 0,
"instructions": [
{
"OFPInstructionActions": {
"actions": [
{
"OFPActionOutput": {
"len": 16,
"max_len": 65535,
"port": 4294967293,
"type": 0
}
}
],
"len": 24,
"type": 4
}
}
],
"length": 80,
"match": {
"OFPMatch": {
"length": 4,
"oxm_fields": [],
"type": 1
}
},
"packet_count": 2,
"priority": 0,
"table_id": 0
}
}
],
"flags": 0,
"type": 1
}
}
]
Thanks,
Iwase
Hi there. That is fantastic. Sounds exactly like what I am looking for so thank you.
One last question for the minute. I know you provided a link but how do you implement this with custom Ryu controller code?
My apologies if I am asking something really obvious.
Cheers
Douglas
Hi, Douglas
Ryu has ofctl_rest.py, which is a sample application and provides REST API to get flow statistics.
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>>>
Post by Iwase Yusuke
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>>>>
Post by Iwase Yusuke
I think it is better to use ofctl_rest.py than to implement your own REST API in your app.
Thanks,
Fujimoto
Greetings I am a PhD student new to both Python and Ryu and I was wondering if anyone could give me some advice.
I am using the Ryu controller program (L2DestForwardStaticRyu.py) provided by Dr Grey Bernstein (https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
Post by Iwase Yusuke
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>
Post by Iwase Yusuke
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu> <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu <https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>>>>) for shortest path computation for a full Mesh network in Mininet but the example provided does not include REST which I require to be able to collect flow statistics such as the flows in each router,
Post by Iwase Yusuke
bandwidth, latency, etc.
Unfortunately I have been looking and with the exception of (https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>>
Post by Iwase Yusuke
<https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html> <https://osrg.github.io/ryu-book/en/html/rest_api.html <https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>>>) which seems
Post by Iwase Yusuke
overly specific, I am unable to find a good example that would allow me to work out how to integrate REST into the above Ryu control program.
So if anyone can point me in the right direction or can provide some examples, I would be most grateful.
Thank you for your time.
Best Regards
Douglas
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>>
Post by Iwase Yusuke
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>>>
Post by Iwase Yusuke
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>>
Post by Iwase Yusuke
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>
Post by Iwase Yusuke
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel> <https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <https://lists.sourceforge.net/lists/listinfo/ryu-devel>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
Douglas Harewood-Gill
2017-06-23 14:26:45 UTC
Permalink
Hi again. I will see how I get on with the instructions you have sent.
Regardless of what happens, I will update you.

Cheers

Douglas
Post by Iwase Yusuke
Hi,
Thanks, we are waiting for your report.
FYI, with the following patch, "--user-flags" option for adding your own CLI options
without modification and re-installing, but please note this patch has not be merged
into upstream yet.
This feature should be included in next release on early next month, I guess.
https://sourceforge.net/p/ryu/mailman/ryu-devel/thread/
1497504689-15184-2-git-send-email-iwase.yusuke0%40gmail.com/#msg35895311
Thanks,
Iwase
Post by Douglas Harewood-Gill
Hi again. Ok, can you talk me through the second part, lets try that and
see what happens. Assuming of course it is still relevant after what we
have already tried.
Post by Douglas Harewood-Gill
"So If you want to define your own CLI option,
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
0. Checkout Ryu Git src (if needed).
$ git clone https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git>> <https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
$ cd ryu
1. Add your definitions into "ryu/flags.py".
The syntax is the same as "oslo.config".
https://docs.openstack.org/developer/oslo.config/ <
https://docs.openstack.org/developer/oslo.config/> <
https://docs.openstack.org/developer/oslo.config/ <
https://docs.openstack.org/developer/oslo.config/>> <
https://docs.openstack.org/developer/oslo.config/ <
https://docs.openstack.org/developer/oslo.config/> <
https://docs.openstack.org/developer/oslo.config/ <
https://docs.openstack.org/developer/oslo.config/>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
2. Re-install Ryu at the top of Ryu directory.
$ pip install -r tools/pip-requires
$ python setup.py install
3. Confirm your own option is inserted into ryu-manager.
$ ryu-manager --help"
Cheers
Douglas
Hi Douglas,
Post by Douglas Harewood-Gill
Hi again. Apologies for the delay in responding and thank you for
getting back to me so quickly.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I finally figured out what you were telling me. So, below is what
I found for each step of the first thing you suggested.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
After using "Python #" to enter the interactive interpreter I
typed "import ryu" and I received no errors, it just went to a new line
with this ">>>".
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
For "ryu.version", it told me my version is 4.12.
For "ryu.app import ofctl_rest", and I I received no errors, it
just went to a new line with this ">>>".
Post by Douglas Harewood-Gill
Good, it seems Ryu is installed as expected.
Then, it is weired to show the following "AttributeError"...
AttributeError: 'module' object has not attribute "ofctl_rest"
"manager.main(args=['ryu.app.ofctl_rest'] + sys.argv)" will try to
load "ofctl_rest"
Post by Douglas Harewood-Gill
from "ryu.app", but "ryu.app import ofctl_rest" does not return any
error...
Post by Douglas Harewood-Gill
Thanks,
Iwase
Post by Douglas Harewood-Gill
Cheers
Douglas
Hi Douglas,
Post by Iwase Yusuke
Hello again. Ok, My apologies bit I really need you to
simplify this for me. Starting with the first bit.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
1) Ryu is definitely installed but do you know the command
to check the version? I have looked online but I can't find anything
specific.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
2) Is there also a way to check that Ryu is installed
correctly?
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
3) What do you mean by "import ryu" and "ryu.version"?
4) Also, "from ryu.app import ofctl_rest"?
The commands I wrote on the previous mail can check these
points.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
"python" command on your shell starts Python interpreter with
"Interactive Mode"
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
https://docs.python.org/2/tutorial/interpreter.html#
interactive-mode <https://docs.python.org/2/tutorial/interpreter.html#
interactive-mode> <https://docs.python.org/2/tutorial/interpreter.html#
interactive-mode <https://docs.python.org/2/tutorial/interpreter.html#
interactive-mode>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
"import ryu" and followed by other words are command (source
code) for Python
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
interactive interpreter.
- "import ryu" checks whether Ryu is installed correctly or
not.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
- "ryu.version" shows version (e.g., '4.14').
- "from ryu.app import ofctl_rest" checks whether
"ofctl_rest" can be imported
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
from your Python or not.
$ python # start Python interactive interpreter
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
import ryu # checks if "ryu" is installed or not
ryu.version # show version info
'4.14'
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
from ryu.app import ofctl_rest # Can import
"ofctl_rest"?
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thanks,
Iwase
Post by Iwase Yusuke
I will see if I can work through this first to see if I can
get it working this way before I look at the second bit. :D
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Thank you for your time and patience so far.
Cheers
Douglas
On 15 June 2017 at 01:06, Iwase Yusuke <
Hi Douglas,
Post by Douglas Harewood-Gill
Hi Iwase. I did try it the other way but the error
"AttributeError: 'module' object has not attribute "ofctl_rest" but it was
worth trying so thank you.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Hmmm... 'ryu.app.ofctl_rest' means the Python module
path to Ryu's built-in app.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
If it got AttributeError, Ryu might not be installed
successfully.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
I recommend you to confirm Ryu is installed
$ python
Post by Douglas Harewood-Gill
import ryu # Can import "ryu"?
ryu.version # Which version?
'4.14'
Post by Douglas Harewood-Gill
from ryu.app import ofctl_rest # Can import
"ofctl_rest"?
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Regarding the instructions you sent me for altering
Ryu, is there any chance you could explain them a bit more please? I am
having a little trouble following them currently.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Sure.
Ryu defines the CLI options in some modules, the most
accessible among them is
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
"ryu/flags.py", I guess.
https://github.com/osrg/ryu/blob/master/ryu/flags.py <
https://github.com/osrg/ryu/blob/master/ryu/flags.py> <
https://github.com/osrg/ryu/blob/master/ryu/flags.py <
https://github.com/osrg/ryu/blob/master/ryu/flags.py>> <
https://github.com/osrg/ryu/blob/master/ryu/flags.py <
https://github.com/osrg/ryu/blob/master/ryu/flags.py> <
https://github.com/osrg/ryu/blob/master/ryu/flags.py <
https://github.com/osrg/ryu/blob/master/ryu/flags.py>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
But to reflect your changes, you need to "re-install"
Ryu before running your
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
applications.
So If you want to define your own CLI option,
0. Checkout Ryu Git src (if needed).
$ git clone https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git>> <https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
$ cd ryu
1. Add your definitions into "ryu/flags.py".
The syntax is the same as "oslo.config".
https://docs.openstack.org/developer/oslo.config/
<https://docs.openstack.org/developer/oslo.config/> <
https://docs.openstack.org/developer/oslo.config/ <
https://docs.openstack.org/developer/oslo.config/>> <
https://docs.openstack.org/developer/oslo.config/ <
https://docs.openstack.org/developer/oslo.config/> <
https://docs.openstack.org/developer/oslo.config/ <
https://docs.openstack.org/developer/oslo.config/>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
2. Re-install Ryu at the top of Ryu directory.
$ pip install -r tools/pip-requires
$ python setup.py install
3. Confirm your own option is inserted into ryu-manager.
$ ryu-manager --help
Thanks,
Iwase
Post by Douglas Harewood-Gill
Thank you :)
Douglas
On 14 June 2017 at 03:24, Iwase Yusuke <
Hi Douglas,
Hmmm... how about swapping the order of arguments?
e.g)
manager.main(args=['ryu.app.ofctl_rest'] +
sys.argv)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
FYI, I guess Dr.Bernstein did "hack"(used
"ryu.cmd.manager" directly) in order to
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
add original CLI option like "--netfile" and
"--widest_paths".
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
On the other hand, you can add your original CLI
option as following.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
$ git diff
diff --git a/ryu/flags.py b/ryu/flags.py
index 69eb3d2..ebf16c8 100644
--- a/ryu/flags.py
+++ b/ryu/flags.py
@@ -112,3 +112,10 @@ CONF.register_cli_opts([
help='Initial Router ID used by Zebra
protocol service '
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
'(default: %s)' %
DEFAULT_ZSERV_ROUTER_ID),
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
], group='zapi')
+
+CONF.register_cli_opts([
+ cfg.StrOpt(
+ 'netfile', default=None, help='network
json file'),
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+ cfg.BoolOpt(
+ 'widest_paths', default=False, help='Use
widest path.'),
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+])
Please note you need to re-install Ryu after the
above modifications.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
$ python setup.py install
Then, with this modification, you can run
"l2DestForwardStaticRyu.py" as the
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
$ ryu-manager --help
...(snip)...
--netfile NETFILE network json file
...(snip)...
--widest_paths Use widest path.
...(snip)...
$ ryu-manager l2DestForwardStaticRyu.py
ryu.app.ofctl_rest --netfile=ExNetwithLoops1A.json --widest_paths
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Thanks,
Iwase
Hi Iwase and thank you for getting back to me.
The author of this program, Dr Bernstein added this line "from ryu.cmd
import manager" which as far as I understand directly starts Ryu from
within side L2DestForwardStaticRyu.py. Should be around line 29 I think. He
had to do this he told me because he could not start the program in the
conventional way because he needed to import the "ExNetwithLoops!A.json
file" for the topology with static mac and IP addresses. Apparently he
could not do this just using the standard Ryu format of starting the Ryu
Manager with the Controller file and then with REST.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
I tried your suggestion by removing
"manager.main(args=sys.argv)"
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
from " if __name__ == "__main__": "
and using the following:-
"manager.main(args=sys.argv +
['ryu.app.ofctl_rest'])" and I got the following error message in the
terminal.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
"l2DestForwardStaticRyuNS: error: unrecognized
arguments: ryu.app.ofctl_rest"
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Any advice would be welcome. I am obviously
going to see what I can find here and will let you know if I find anything
relevant.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Cheers
Douglas
On 13 June 2017 at 02:17, Iwase Yusuke <
Hi Douglas,
I checked "L2DestForwardStaticRyu.py", and
it seems to be "hacked" to run
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
app without "ryu-manager".
To start the built-in Ryu application with
"L2DestForwardStaticRyu.py",
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
how about the following?
The following appends to "ofctl_rest" app to
the argument of "manager".
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
- manager.main(args=sys.argv)
+ manager.main(args=sys.argv +
['ryu.app.ofctl_rest'])
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Thanks,
Iwase
On 2017幎06月09日 21:00, Douglas Harewood-Gill
Hi Iwase. Thank you for contacting me and
apologies for my delay in responding. I have tried what you have suggested
but the problem I have is that the L2DestForwardStaticRyu.py program is
designed to run on its own. It imports the the ryu.cmd import manager and
uses the Ryu controller but you start it by typing "|python
l2DestForwardStaticRyu.py --netfile=ExNetwithLoops1A.json" |where it
imports =ExNetWithLoops1A.Json.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
When this program is started, it
automatically loads Ryu and implements the code within this program. I am
not sure how to start the this and ryu.app.ofctl_rest at the same time. I
have tried starting them separately in different terminals but that did not
work.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Thank you also for the information you
have sent. I have looked at it before but I do not know how to implement
this with my custom code. I have been looking for examples but they seem to
be few and far between. Any advice as always would be greatly appreciated.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Thanks again.
Douglas
On 8 June 2017 at 01:27, Iwase Yusuke <
Hi Douglas,
Excuse me for cutting in.
Just for getting flow statistics, how
about running your app and ofctl_rest
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
together as Fujimoto said.
e.g.)
$ ryu-manager your_app.py
ryu.app.ofctl_rest
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
If you want to implement your own REST
APIs on your app, Ryu-Book is the
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
most helpful as far as I know.
(You might already be aware of this
though...)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html>> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html>>> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html>> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html> <http://osrg.github.io/ryu-
book/en/html/rest_api.html <http://osrg.github.io/ryu-
book/en/html/rest_api.html>>>> <http://osrg.github.io/ryu-
book/en/html/rest_api.html
Post by Douglas Harewood-Gill
<http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>>>>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>>>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html
Post by Douglas Harewood-Gill
<http://osrg.github.io/ryu-book/en/html/rest_api.html>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
FYI, here is an sample implementation
on simple_switch_13.py for getting
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
flow statistics.
The usage of "WSGI" framework is
described on Ryu-Book.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
$ git diff
diff --git
a/ryu/app/simple_switch_13.py b/ryu/app/simple_switch_13.py
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
index 3e7c598..f33e474 100644
--- a/ryu/app/simple_switch_13.py
+++ b/ryu/app/simple_switch_13.py
@@ -13,6 +13,8 @@
# See the License for the specific
language governing permissions and
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
# limitations under the License.
+import json
+
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import
CONFIG_DISPATCHER, MAIN_DISPATCHER
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
@@ -21,14 +23,26 @@ from ryu.ofproto
import ofproto_v1_3
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
from ryu.lib.packet import packet
from ryu.lib.packet import ethernet
from ryu.lib.packet import ether_types
+from ryu.app.ofctl import api as
ofctl_api
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+from ryu.app.wsgi import
ControllerBase
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+from ryu.app.wsgi import Response
+from ryu.app.wsgi import route
+from ryu.app.wsgi import
WSGIApplication
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+
+
+_URI_PREFIX =
'/simpleswitch/stats/{dpid}'
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
class SimpleSwitch13(app_manager.
OFP_VERSIONS =
[ofproto_v1_3.OFP_VERSION]
WSGIApplication}
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
def __init__(self, *args,
super(SimpleSwitch13,
self).__init__(*args, **kwargs)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
self.mac_to_port = {}
+ wsgi = kwargs['wsgi']
+ wsgi.register(
SimpleSwitchController,
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+
{SimpleSwitch13.__name__: self})
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
@set_ev_cls(ofp_event.EventOFPSwitchFeatures,
CONFIG_DISPATCHER)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
def switch_features_handler(self,
@@ -117,3 +131,32 @@ class
out =
parser.OFPPacketOut(datapath=datapath, buffer_id=msg.buffer_id,
in_port=in_port, actions=actions, data=data)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
datapath.send_msg(out)
+
+ datapath =
ofctl_api.get_datapath(self, dpid)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+ return None
+
+ parser =
datapath.ofproto_parser
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+ req =
parser.OFPFlowStatsRequest(datapath)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+
+ rep = ofctl_api.send_msg(
+ app=self, msg=req,
+ reply_cls=parser.OFPFlowStatsReply,
reply_multi=True)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+ return [r.to_jsondict() for r
in rep]
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+
+
+class SimpleSwitchController(
+
+ def __init__(self, req, link,
+ super(SimpleSwitchController,
self).__init__(req, link, data, **config)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+ self.simple_switch_app =
data[SimpleSwitch13.__name__]
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+
_URI_PREFIX, methods=['GET'])
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+ def list_mac_table(self, req,
+ dpid =
int(str(kwargs['dpid']))
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+ ret =
self.simple_switch_app.get_flow_stats(dpid)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+ return
Response(status=404)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+
+ return Response(content_type='application/json',
body=json.dumps(ret))
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
$ ryu-manager
ryu/app/simple_switch_13.py
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Registered VCS backend: git
Registered VCS backend: hg
Registered VCS backend: svn
Registered VCS backend: bzr
loading app ryu/app/simple_switch_13.py
loading app ryu.controller.ofp_handler
loading app ryu.app.ofctl.service
loading app ryu.controller.ofp_handler
creating context wsgi
instantiating app
ryu.app.ofctl.service of OfctlService
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
instantiating app
ryu/app/simple_switch_13.py of SimpleSwitch13
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
instantiating app
ryu.controller.ofp_handler of OFPHandler
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
(10332) wsgi starting up on
http://0.0.0.0:8080
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
...
$ curl -X GET http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/
simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/
simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/
simpleswitch/stats/1>>>> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> <
http://localhost:8080/simpleswitch/stats/1
Post by Douglas Harewood-Gill
<http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/
simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/
simpleswitch/stats/1>>>>> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/
simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1>>> <http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/
simpleswitch/stats/1>>>> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/
simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1>>> <http://localhost:8080/
simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/
simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/
simpleswitch/stats/1
Post by Douglas Harewood-Gill
<http://localhost:8080/simpleswitch/stats/1>>>>>> | python -m
json.tool
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
[
{
"OFPFlowStatsReply": {
"body": [
{
"OFPFlowStats": {
140,
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
"cookie": 0,
"duration_nsec": 771000000,
"duration_sec": 1,
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
"flags": 0,
"hard_timeout": 0,
"idle_timeout": 0,
"instructions": [
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
{
"OFPInstructionActions": {
"actions": [
{
"OFPActionOutput": {
"len": 16,
"max_len": 65535,
"port": 4294967293,
"type": 0
}
}
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
],
"len": 24,
"type": 4
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
}
}
],
"length": 80,
"match": {
"OFPMatch": {
"length": 4,
"oxm_fields": [],
"type": 1
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
}
},
"packet_count": 2,
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
"priority": 0,
"table_id": 0
}
}
],
"flags": 0,
"type": 1
}
}
]
Thanks,
Iwase
On 2017幎06月07日 20:21, Douglas
Post by Douglas Harewood-Gill
Hi there. That is fantastic. Sounds
exactly like what I am looking for so thank you.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
One last question for the minute. I
know you provided a link but how do you implement this with custom Ryu
controller code?
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
My apologies if I am asking
something really obvious.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Cheers
Douglas
On 7 June 2017 at 01:15, Fujimoto
Hi, Douglas
Ryu has ofctl_rest.py, which is
a sample application and provides REST API to get flow statistics.
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
Post by Douglas Harewood-Gill
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
Post by Douglas Harewood-Gill
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
Post by Douglas Harewood-Gill
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
Post by Douglas Harewood-Gill
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I think it is better to use
ofctl_rest.py than to implement your own REST API in your app.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thanks,
Fujimoto
On 2017幎06月06日 21:18, Douglas
Post by Douglas Harewood-Gill
Greetings I am a PhD student
new to both Python and Ryu and I was wondering if anyone could give me some
advice.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I am using the Ryu controller
program (L2DestForwardStaticRyu.py) provided by Dr Grey Bernstein (
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>>>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
<https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>>
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>>>>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>>>
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>>>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#
programming-switches-with-ryu <https://www.grotto-
networking.com/SDNfun.html#programming-switches-with-ryu>>>>>>>) for
shortest path computation for a full Mesh network in Mininet but the
example provided does not include REST which I require to be able to
collect flow statistics such as the flows in each router,
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
bandwidth, latency, etc.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Unfortunately I have been
looking and with the exception of (https://osrg.github.io/ryu-
book/en/html/rest_api.html <https://osrg.github.io/ryu-
book/en/html/rest_api.html> <https://osrg.github.io/ryu-
book/en/html/rest_api.html <https://osrg.github.io/ryu-
book/en/html/rest_api.html>> <https://osrg.github.io/ryu-
book/en/html/rest_api.html <https://osrg.github.io/ryu-
book/en/html/rest_api.html> <https://osrg.github.io/ryu-
book/en/html/rest_api.html <https://osrg.github.io/ryu-
book/en/html/rest_api.html>>> <https://osrg.github.io/ryu-
book/en/html/rest_api.html <https://osrg.github.io/ryu-
book/en/html/rest_api.html> <https://osrg.github.io/ryu-
book/en/html/rest_api.html <https://osrg.github.io/ryu-
book/en/html/rest_api.html>> <https://osrg.github.io/ryu-
book/en/html/rest_api.html <https://osrg.github.io/ryu-
book/en/html/rest_api.html> <https://osrg.github.io/ryu-
book/en/html/rest_api.html <https://osrg.github.io/ryu-
book/en/html/rest_api.html>>>> <https://osrg.github.io/ryu-
book/en/html/rest_api.html
Post by Douglas Harewood-Gill
<https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html
Post by Douglas Harewood-Gill
<https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
<https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html
Post by Douglas Harewood-Gill
<https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html
Post by Douglas Harewood-Gill
<https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>>>) which seems
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
overly specific, I am unable to find a good
example that would allow me to work out how to integrate REST into the
above Ryu control program.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
So if anyone can point me in
the right direction or can provide some examples, I would be most grateful.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thank you for your time.
Best Regards
Douglas
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications
(PhD), University of Bristol
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught
and Research)
bristol.ac.uk
bristol.ac.uk>>
bristol.ac.uk
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
*
CDT Communications*
University of Bristol, Merchant
Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------
------------------------------------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech
community on one of the world's most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites,
Slashdot.org! http://sdm.link/slashdot
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
______________________________
_________________
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Ryu-devel mailing list
sourceforge.net>
sourceforge.net
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
https://lists.sourceforge.net/
lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>>>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD),
University of Bristol
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught and
Research)
bristol.ac.uk
bristol.ac.uk>>
bristol.ac.uk
bristol.ac.uk>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
*
CDT Communications*
University of Bristol, Merchant
Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------
------------------------------------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community
on one of the world's most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org!
http://sdm.link/slashdot
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
______________________________
_________________
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Ryu-devel mailing list
sourceforge.net
sourceforge.net>>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
https://lists.sourceforge.net/
lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>>>>
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD),
University of Bristol
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught and Research)
bristol.ac.uk>
bristol.ac.uk
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
*
CDT Communications*
University of Bristol, Merchant Venturers'
Building, Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------
------------------------------------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Check out the vibrant tech community on
one of the world's most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org!
http://sdm.link/slashdot
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
______________________________
_________________
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Ryu-devel mailing list
https://lists.sourceforge.net/
lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>>>>
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University
of Bristol
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers'
Building, Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------
------------------------------------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of
the world's most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org!
http://sdm.link/slashdot
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/
lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel> <https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.
net/lists/listinfo/ryu-devel>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of
Bristol
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building,
Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------
------------------------------------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the
world's most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org!
http://sdm.link/slashdot
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building,
Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Check out the vibrant tech community on one of the world's
most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland
Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
sourceforge.net>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
e-mail: douglas.harewood-***@bristol.ac.uk


*CDT Communications*

University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB

http://www.bristol.ac.uk/
Douglas Harewood-Gill
2017-06-23 15:03:51 UTC
Permalink
Hi again. My apologies but I seem to be stuck.

Few questions:-

1) Do I need to create a file called user_flags.py ? I cannot locate one in
my version of Ryu or do I need to update my version of Ryu?
2) Are all the commands issues via the terminal?

Apologies if I am asking really obvious stuff.

Thanks again,

Douglas

On 23 June 2017 at 15:26, Douglas Harewood-Gill <
Post by Douglas Harewood-Gill
Hi again. I will see how I get on with the instructions you have sent.
Regardless of what happens, I will update you.
Cheers
Douglas
Post by Iwase Yusuke
Hi,
Thanks, we are waiting for your report.
FYI, with the following patch, "--user-flags" option for adding your own CLI options
without modification and re-installing, but please note this patch has not be merged
into upstream yet.
This feature should be included in next release on early next month, I guess.
https://sourceforge.net/p/ryu/mailman/ryu-devel/thread/14975
04689-15184-2-git-send-email-iwase.yusuke0%40gmail.com/#msg35895311
Thanks,
Iwase
Post by Douglas Harewood-Gill
Hi again. Ok, can you talk me through the second part, lets try that
and see what happens. Assuming of course it is still relevant after what we
have already tried.
Post by Douglas Harewood-Gill
"So If you want to define your own CLI option,
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
0. Checkout Ryu Git src (if needed).
$ git clone https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git>> <https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
$ cd ryu
1. Add your definitions into "ryu/flags.py".
The syntax is the same as "oslo.config".
https://docs.openstack.org/developer/oslo.config/ <
https://docs.openstack.org/developer/oslo.config/> <
https://docs.openstack.org/developer/oslo.config/ <
https://docs.openstack.org/developer/oslo.config/>> <
https://docs.openstack.org/developer/oslo.config/ <
https://docs.openstack.org/developer/oslo.config/> <
https://docs.openstack.org/developer/oslo.config/ <
https://docs.openstack.org/developer/oslo.config/>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
2. Re-install Ryu at the top of Ryu directory.
$ pip install -r tools/pip-requires
$ python setup.py install
3. Confirm your own option is inserted into ryu-manager.
$ ryu-manager --help"
Cheers
Douglas
Hi Douglas,
Post by Douglas Harewood-Gill
Hi again. Apologies for the delay in responding and thank you for
getting back to me so quickly.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I finally figured out what you were telling me. So, below is what
I found for each step of the first thing you suggested.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
After using "Python #" to enter the interactive interpreter I
typed "import ryu" and I received no errors, it just went to a new line
with this ">>>".
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
For "ryu.version", it told me my version is 4.12.
For "ryu.app import ofctl_rest", and I I received no errors, it
just went to a new line with this ">>>".
Post by Douglas Harewood-Gill
Good, it seems Ryu is installed as expected.
Then, it is weired to show the following "AttributeError"...
AttributeError: 'module' object has not attribute "ofctl_rest"
"manager.main(args=['ryu.app.ofctl_rest'] + sys.argv)" will try to
load "ofctl_rest"
Post by Douglas Harewood-Gill
from "ryu.app", but "ryu.app import ofctl_rest" does not return any
error...
Post by Douglas Harewood-Gill
Thanks,
Iwase
Post by Douglas Harewood-Gill
Cheers
Douglas
Hi Douglas,
Post by Iwase Yusuke
Hello again. Ok, My apologies bit I really need you to
simplify this for me. Starting with the first bit.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
1) Ryu is definitely installed but do you know the command
to check the version? I have looked online but I can't find anything
specific.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
2) Is there also a way to check that Ryu is installed
correctly?
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
3) What do you mean by "import ryu" and "ryu.version"?
4) Also, "from ryu.app import ofctl_rest"?
The commands I wrote on the previous mail can check these
points.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
"python" command on your shell starts Python interpreter with
"Interactive Mode"
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
https://docs.python.org/2/tutorial/interpreter.html#interac
tive-mode <https://docs.python.org/2/tutorial/interpreter.html#interac
tive-mode> <https://docs.python.org/2/tutorial/interpreter.html#interac
tive-mode <https://docs.python.org/2/tutorial/interpreter.html#interac
tive-mode>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
"import ryu" and followed by other words are command (source
code) for Python
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
interactive interpreter.
- "import ryu" checks whether Ryu is installed correctly or
not.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
- "ryu.version" shows version (e.g., '4.14').
- "from ryu.app import ofctl_rest" checks whether
"ofctl_rest" can be imported
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
from your Python or not.
$ python # start Python interactive interpreter
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
import ryu # checks if "ryu" is installed or not
ryu.version # show version info
'4.14'
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
from ryu.app import ofctl_rest # Can import
"ofctl_rest"?
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thanks,
Iwase
Post by Iwase Yusuke
I will see if I can work through this first to see if I can
get it working this way before I look at the second bit. :D
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Thank you for your time and patience so far.
Cheers
Douglas
On 15 June 2017 at 01:06, Iwase Yusuke <
Hi Douglas,
Post by Douglas Harewood-Gill
Hi Iwase. I did try it the other way but the error
"AttributeError: 'module' object has not attribute "ofctl_rest" but it was
worth trying so thank you.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Hmmm... 'ryu.app.ofctl_rest' means the Python module
path to Ryu's built-in app.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
If it got AttributeError, Ryu might not be installed
successfully.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
I recommend you to confirm Ryu is installed
$ python
Post by Douglas Harewood-Gill
import ryu # Can import "ryu"?
ryu.version # Which version?
'4.14'
Post by Douglas Harewood-Gill
from ryu.app import ofctl_rest # Can import
"ofctl_rest"?
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Regarding the instructions you sent me for altering
Ryu, is there any chance you could explain them a bit more please? I am
having a little trouble following them currently.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Sure.
Ryu defines the CLI options in some modules, the most
accessible among them is
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
"ryu/flags.py", I guess.
https://github.com/osrg/ryu/blob/master/ryu/flags.py
<https://github.com/osrg/ryu/blob/master/ryu/flags.py> <
https://github.com/osrg/ryu/blob/master/ryu/flags.py <
https://github.com/osrg/ryu/blob/master/ryu/flags.py>> <
https://github.com/osrg/ryu/blob/master/ryu/flags.py <
https://github.com/osrg/ryu/blob/master/ryu/flags.py> <
https://github.com/osrg/ryu/blob/master/ryu/flags.py <
https://github.com/osrg/ryu/blob/master/ryu/flags.py>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
But to reflect your changes, you need to "re-install"
Ryu before running your
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
applications.
So If you want to define your own CLI option,
0. Checkout Ryu Git src (if needed).
$ git clone https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git>> <https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git <
https://github.com/osrg/ryu.git>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
$ cd ryu
1. Add your definitions into "ryu/flags.py".
The syntax is the same as "oslo.config".
https://docs.openstack.org/developer/oslo.config/
<https://docs.openstack.org/developer/oslo.config/> <
https://docs.openstack.org/developer/oslo.config/ <
https://docs.openstack.org/developer/oslo.config/>> <
https://docs.openstack.org/developer/oslo.config/ <
https://docs.openstack.org/developer/oslo.config/> <
https://docs.openstack.org/developer/oslo.config/ <
https://docs.openstack.org/developer/oslo.config/>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
2. Re-install Ryu at the top of Ryu directory.
$ pip install -r tools/pip-requires
$ python setup.py install
3. Confirm your own option is inserted into
ryu-manager.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
$ ryu-manager --help
Thanks,
Iwase
Post by Douglas Harewood-Gill
Thank you :)
Douglas
On 14 June 2017 at 03:24, Iwase Yusuke <
Hi Douglas,
Hmmm... how about swapping the order of arguments?
e.g)
manager.main(args=['ryu.app.ofctl_rest'] +
sys.argv)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
FYI, I guess Dr.Bernstein did "hack"(used
"ryu.cmd.manager" directly) in order to
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
add original CLI option like "--netfile" and
"--widest_paths".
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
On the other hand, you can add your original CLI
option as following.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
$ git diff
diff --git a/ryu/flags.py b/ryu/flags.py
index 69eb3d2..ebf16c8 100644
--- a/ryu/flags.py
+++ b/ryu/flags.py
@@ -112,3 +112,10 @@ CONF.register_cli_opts([
help='Initial Router ID used by Zebra
protocol service '
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
'(default: %s)' %
DEFAULT_ZSERV_ROUTER_ID),
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
], group='zapi')
+
+CONF.register_cli_opts([
+ cfg.StrOpt(
+ 'netfile', default=None, help='network
json file'),
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+ cfg.BoolOpt(
+ 'widest_paths', default=False, help='Use
widest path.'),
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+])
Please note you need to re-install Ryu after the
above modifications.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
$ python setup.py install
Then, with this modification, you can run
"l2DestForwardStaticRyu.py" as the
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
$ ryu-manager --help
...(snip)...
--netfile NETFILE network json file
...(snip)...
--widest_paths Use widest path.
...(snip)...
$ ryu-manager l2DestForwardStaticRyu.py
ryu.app.ofctl_rest --netfile=ExNetwithLoops1A.json --widest_paths
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Thanks,
Iwase
Hi Iwase and thank you for getting back to me.
The author of this program, Dr Bernstein added this line "from ryu.cmd
import manager" which as far as I understand directly starts Ryu from
within side L2DestForwardStaticRyu.py. Should be around line 29 I think. He
had to do this he told me because he could not start the program in the
conventional way because he needed to import the "ExNetwithLoops!A.json
file" for the topology with static mac and IP addresses. Apparently he
could not do this just using the standard Ryu format of starting the Ryu
Manager with the Controller file and then with REST.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
I tried your suggestion by removing
"manager.main(args=sys.argv)"
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
from " if __name__ == "__main__": "
and using the following:-
"manager.main(args=sys.argv +
['ryu.app.ofctl_rest'])" and I got the following error message in the
terminal.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
"l2DestForwardStaticRyuNS: error: unrecognized
arguments: ryu.app.ofctl_rest"
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Any advice would be welcome. I am obviously
going to see what I can find here and will let you know if I find anything
relevant.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Cheers
Douglas
On 13 June 2017 at 02:17, Iwase Yusuke <
Hi Douglas,
I checked "L2DestForwardStaticRyu.py", and
it seems to be "hacked" to run
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
app without "ryu-manager".
To start the built-in Ryu application with
"L2DestForwardStaticRyu.py",
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
how about the following?
The following appends to "ofctl_rest" app
to the argument of "manager".
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
- manager.main(args=sys.argv)
+ manager.main(args=sys.argv +
['ryu.app.ofctl_rest'])
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Thanks,
Iwase
On 2017幎06月09日 21:00, Douglas Harewood-Gill
Hi Iwase. Thank you for contacting me and
apologies for my delay in responding. I have tried what you have suggested
but the problem I have is that the L2DestForwardStaticRyu.py program is
designed to run on its own. It imports the the ryu.cmd import manager and
uses the Ryu controller but you start it by typing "|python
l2DestForwardStaticRyu.py --netfile=ExNetwithLoops1A.json" |where it
imports =ExNetWithLoops1A.Json.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
When this program is started, it
automatically loads Ryu and implements the code within this program. I am
not sure how to start the this and ryu.app.ofctl_rest at the same time. I
have tried starting them separately in different terminals but that did not
work.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Thank you also for the information you
have sent. I have looked at it before but I do not know how to implement
this with my custom code. I have been looking for examples but they seem to
be few and far between. Any advice as always would be greatly appreciated.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Thanks again.
Douglas
On 8 June 2017 at 01:27, Iwase Yusuke <
Hi Douglas,
Excuse me for cutting in.
Just for getting flow statistics, how
about running your app and ofctl_rest
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
together as Fujimoto said.
e.g.)
$ ryu-manager your_app.py
ryu.app.ofctl_rest
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
If you want to implement your own
REST APIs on your app, Ryu-Book is the
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
most helpful as far as I know.
(You might already be aware of this
though...)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
http://osrg.github.io/ryu-boo
k/en/html/rest_api.html <http://osrg.github.io/ryu-boo
k/en/html/rest_api.html> <http://osrg.github.io/ryu-boo
k/en/html/rest_api.html <http://osrg.github.io/ryu-boo
k/en/html/rest_api.html>> <http://osrg.github.io/ryu-boo
k/en/html/rest_api.html <http://osrg.github.io/ryu-boo
k/en/html/rest_api.html> <http://osrg.github.io/ryu-boo
k/en/html/rest_api.html <http://osrg.github.io/ryu-boo
k/en/html/rest_api.html>>> <http://osrg.github.io/ryu-boo
k/en/html/rest_api.html <http://osrg.github.io/ryu-boo
k/en/html/rest_api.html> <http://osrg.github.io/ryu-boo
k/en/html/rest_api.html <http://osrg.github.io/ryu-boo
k/en/html/rest_api.html>> <http://osrg.github.io/ryu-boo
k/en/html/rest_api.html <http://osrg.github.io/ryu-boo
k/en/html/rest_api.html> <http://osrg.github.io/ryu-boo
k/en/html/rest_api.html <http://osrg.github.io/ryu-boo
k/en/html/rest_api.html>>>> <http://osrg.github.io/ryu-boo
k/en/html/rest_api.html
Post by Douglas Harewood-Gill
<http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>>>>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>>>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html
Post by Douglas Harewood-Gill
<http://osrg.github.io/ryu-book/en/html/rest_api.html>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html> <
http://osrg.github.io/ryu-book/en/html/rest_api.html <
http://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
FYI, here is an sample implementation
on simple_switch_13.py for getting
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
flow statistics.
The usage of "WSGI" framework is
described on Ryu-Book.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
$ git diff
diff --git
a/ryu/app/simple_switch_13.py b/ryu/app/simple_switch_13.py
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
index 3e7c598..f33e474 100644
--- a/ryu/app/simple_switch_13.py
+++ b/ryu/app/simple_switch_13.py
@@ -13,6 +13,8 @@
# See the License for the specific
language governing permissions and
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
# limitations under the License.
+import json
+
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import
CONFIG_DISPATCHER, MAIN_DISPATCHER
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
@@ -21,14 +23,26 @@ from ryu.ofproto
import ofproto_v1_3
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
from ryu.lib.packet import packet
from ryu.lib.packet import ethernet
from ryu.lib.packet import
ether_types
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+from ryu.app.ofctl import api as
ofctl_api
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+from ryu.app.wsgi import
ControllerBase
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+from ryu.app.wsgi import Response
+from ryu.app.wsgi import route
+from ryu.app.wsgi import
WSGIApplication
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+
+
+_URI_PREFIX =
'/simpleswitch/stats/{dpid}'
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
class SimpleSwitch13(app_manager.Ryu
OFP_VERSIONS =
[ofproto_v1_3.OFP_VERSION]
WSGIApplication}
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
def __init__(self, *args,
super(SimpleSwitch13,
self).__init__(*args, **kwargs)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
self.mac_to_port = {}
+ wsgi = kwargs['wsgi']
+
wsgi.register(SimpleSwitchController,
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+
{SimpleSwitch13.__name__: self})
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
@set_ev_cls(ofp_event.EventOFPSwitchFeatures,
CONFIG_DISPATCHER)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
def
@@ -117,3 +131,32 @@ class
out =
parser.OFPPacketOut(datapath=datapath, buffer_id=msg.buffer_id,
in_port=in_port, actions=actions, data=data)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
datapath.send_msg(out)
+
+ datapath =
ofctl_api.get_datapath(self, dpid)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+ return None
+
+ parser =
datapath.ofproto_parser
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+ req =
parser.OFPFlowStatsRequest(datapath)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+
+ rep = ofctl_api.send_msg(
+ app=self, msg=req,
+
reply_cls=parser.OFPFlowStatsReply, reply_multi=True)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+ return [r.to_jsondict() for
r in rep]
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+
+
+class SimpleSwitchController(Control
+
+ def __init__(self, req, link,
+
super(SimpleSwitchController, self).__init__(req, link, data, **config)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+ self.simple_switch_app =
data[SimpleSwitch13.__name__]
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+
_URI_PREFIX, methods=['GET'])
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+ def list_mac_table(self, req,
+ dpid =
int(str(kwargs['dpid']))
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+ ret =
self.simple_switch_app.get_flow_stats(dpid)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+ return
Response(status=404)
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+
+ return
Response(content_type='application/json', body=json.dumps(ret))
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
$ ryu-manager
ryu/app/simple_switch_13.py
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Registered VCS backend: git
Registered VCS backend: hg
Registered VCS backend: svn
Registered VCS backend: bzr
loading app
ryu/app/simple_switch_13.py
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
loading app ryu.controller.ofp_handler
loading app ryu.app.ofctl.service
loading app ryu.controller.ofp_handler
creating context wsgi
instantiating app
ryu.app.ofctl.service of OfctlService
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
instantiating app
ryu/app/simple_switch_13.py of SimpleSwitch13
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
instantiating app
ryu.controller.ofp_handler of OFPHandler
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
(10332) wsgi starting up on
http://0.0.0.0:8080
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
...
$ curl -X GET
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simples
witch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1>> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simples
witch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1>>> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simples
witch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1>> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simples
witch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1>>>> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simples
witch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1>> <
http://localhost:8080/simpleswitch/stats/1
Post by Douglas Harewood-Gill
<http://localhost:8080/simpleswitch/stats/1> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simples
witch/stats/1>>> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simples
witch/stats/1>> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simples
witch/stats/1>>>>> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simples
witch/stats/1>> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simples
witch/stats/1>>> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1>> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simples
witch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1>>>> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simples
witch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1>> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simples
witch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1>>> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simples
witch/stats/1> <http://localhost:8080/simpleswitch/stats/1 <
http://localhost:8080/simpleswitch/stats/1>> <
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simples
witch/stats/1> <http://localhost:8080/simpleswitch/stats/1
Post by Douglas Harewood-Gill
<http://localhost:8080/simpleswitch/stats/1>>>>>> | python -m
json.tool
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
[
{
"OFPFlowStatsReply": {
"body": [
{
"OFPFlowStats": {
140,
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
"cookie": 0,
"duration_nsec": 771000000,
"duration_sec": 1,
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
"flags": 0,
"hard_timeout": 0,
"idle_timeout": 0,
"instructions": [
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
{
"OFPInstructionActions": {
"actions": [
{
"OFPActionOutput": {
"len": 16,
"max_len": 65535,
"port": 4294967293,
"type": 0
}
}
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
],
"len": 24,
"type": 4
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
}
}
],
"length": 80,
"match": {
"OFPMatch": {
"length": 4,
"oxm_fields": [],
"type": 1
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
}
},
"packet_count": 2,
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
"priority": 0,
"table_id": 0
}
}
],
"flags": 0,
"type": 1
}
}
]
Thanks,
Iwase
On 2017幎06月07日 20:21, Douglas
Post by Douglas Harewood-Gill
Hi there. That is fantastic. Sounds
exactly like what I am looking for so thank you.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
One last question for the minute. I
know you provided a link but how do you implement this with custom Ryu
controller code?
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
My apologies if I am asking
something really obvious.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Cheers
Douglas
On 7 June 2017 at 01:15, Fujimoto
Hi, Douglas
Ryu has ofctl_rest.py, which is
a sample application and provides REST API to get flow statistics.
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
Post by Douglas Harewood-Gill
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
Post by Douglas Harewood-Gill
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
<http://ryu.readthedocs.io/
en/latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html>>> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html>> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html>>>> <http://ryu.readthedocs.io/en/
latest/app/ofctl_rest.html
Post by Douglas Harewood-Gill
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
Post by Douglas Harewood-Gill
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html> <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html <
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I think it is better to use
ofctl_rest.py than to implement your own REST API in your app.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thanks,
Fujimoto
On 2017幎06月06日 21:18, Douglas
Post by Douglas Harewood-Gill
Greetings I am a PhD student
new to both Python and Ryu and I was wondering if anyone could give me some
advice.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I am using the Ryu controller
program (L2DestForwardStaticRyu.py) provided by Dr Grey Bernstein (
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>>> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>>
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>>>> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>>>>> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>>
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>>> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
<https://www.grotto-networkin
g.com/SDNfun.html#programming-switches-with-ryu <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu> <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu>>>> <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu> <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu>> <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu> <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu>>>
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>>>>>> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>>> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>>>>
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
<https://www.grotto-networkin
g.com/SDNfun.html#programming-switches-with-ryu <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu> <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu>> <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu> <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu>>>>> <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu> <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu>>
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>>> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>>> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>>
Post by Douglas Harewood-Gill
<https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu> <
https://www.grotto-networking.com/SDNfun.html#programming-
switches-with-ryu <https://www.grotto-networking
.com/SDNfun.html#programming-switches-with-ryu>>>>>>>) for shortest path
computation for a full Mesh network in Mininet but the example provided
does not include REST which I require to be able to collect flow statistics
such as the flows in each router,
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
bandwidth, latency, etc.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Unfortunately I have been
looking and with the exception of (https://osrg.github.io/ryu-bo
ok/en/html/rest_api.html <https://osrg.github.io/ryu-bo
ok/en/html/rest_api.html> <https://osrg.github.io/ryu-bo
ok/en/html/rest_api.html <https://osrg.github.io/ryu-bo
ok/en/html/rest_api.html>> <https://osrg.github.io/ryu-bo
ok/en/html/rest_api.html <https://osrg.github.io/ryu-bo
ok/en/html/rest_api.html> <https://osrg.github.io/ryu-bo
ok/en/html/rest_api.html <https://osrg.github.io/ryu-bo
ok/en/html/rest_api.html>>> <https://osrg.github.io/ryu-bo
ok/en/html/rest_api.html <https://osrg.github.io/ryu-bo
ok/en/html/rest_api.html> <https://osrg.github.io/ryu-bo
ok/en/html/rest_api.html <https://osrg.github.io/ryu-bo
ok/en/html/rest_api.html>> <https://osrg.github.io/ryu-bo
ok/en/html/rest_api.html <https://osrg.github.io/ryu-bo
ok/en/html/rest_api.html> <https://osrg.github.io/ryu-bo
ok/en/html/rest_api.html <https://osrg.github.io/ryu-bo
ok/en/html/rest_api.html>>>> <https://osrg.github.io/ryu-bo
ok/en/html/rest_api.html
Post by Douglas Harewood-Gill
<https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html
Post by Douglas Harewood-Gill
<https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html
Post by Douglas Harewood-Gill
<https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html
Post by Douglas Harewood-Gill
<https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html> <
https://osrg.github.io/ryu-book/en/html/rest_api.html <
https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>>>) which seems
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
overly specific, I am unable to find a good
example that would allow me to work out how to integrate REST into the
above Ryu control program.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
So if anyone can point me in
the right direction or can provide some examples, I would be most grateful.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thank you for your time.
Best Regards
Douglas
--
*Douglas Harewood-Gill MSc
MIET*
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
CDT Student in Communications
(PhD), University of Bristol
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught
and Research)
bristol.ac.uk
bristol.ac.uk>>
bristol.ac.uk
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
*
CDT Communications*
University of Bristol,
Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
-----------------------------
-------------------------------------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech
community on one of the world's most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites,
Slashdot.org! http://sdm.link/slashdot
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
_____________________________
__________________
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Ryu-devel mailing list
https://lists.sourceforge.
net/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel>>>> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications
(PhD), University of Bristol
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught and
Research)
bristol.ac.uk
bristol.ac.uk>>
bristol.ac.uk
bristol.ac.uk>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
*
CDT Communications*
University of Bristol, Merchant
Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------
------------------------------------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech
community on one of the world's most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org!
http://sdm.link/slashdot
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
______________________________
_________________
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Ryu-devel mailing list
forge.net
forge.net>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
https://lists.sourceforge.net/
lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel>>>>
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD),
University of Bristol
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught and
Research)
bristol.ac.uk>
bristol.ac.uk
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
*
CDT Communications*
University of Bristol, Merchant
Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------
------------------------------------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Check out the vibrant tech community on
one of the world's most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org!
http://sdm.link/slashdot
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
______________________________
_________________
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Ryu-devel mailing list
https://lists.sourceforge.net/
lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel>>>>
Post by Douglas Harewood-Gill
<https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University
of Bristol
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers'
Building, Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------
------------------------------------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of
the world's most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org!
http://sdm.link/slashdot
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/
lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel>>> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel>>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of
Bristol
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building,
Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------
------------------------------------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the
world's most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org!
http://sdm.link/slashdot
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/
lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel>> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel> <https://lists.sourceforge.net
/lists/listinfo/ryu-devel <https://lists.sourceforge.net
/lists/listinfo/ryu-devel>>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building,
Woodland Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
http://www.bristol.ac.uk/
------------------------------
------------------------------------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
Check out the vibrant tech community on one of the world's
most
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Iwase Yusuke
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel> <
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland
Road, Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
forge.net>
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
https://lists.sourceforge.net/lists/listinfo/ryu-devel <
https://lists.sourceforge.net/lists/listinfo/ryu-devel>
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------
------------------
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
e-mail: douglas.harewood-***@bristol.ac.uk


*CDT Communications*

University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB

http://www.bristol.ac.uk/
Iwase Yusuke
2017-06-26 00:17:16 UTC
Permalink
Hi Douglas,
Post by Douglas Harewood-Gill
Hi again. My apologies but I seem to be stuck.
Few questions:-
1) Do I need to create a file called user_flags.py ? I cannot locate one in my version of Ryu or do
I need to update my version of Ryu?
To enable "--user-flags" option, please update Ryu with the latest Git source from GitHub, first.
And user_flags.py is supposed to be created by user, so not included in Ryu source.
Post by Douglas Harewood-Gill
2) Are all the commands issues via the terminal?
Which "commands" you mean?
The following commands? If so, yes.

# Create user_flogs.py including sample configurations
$ cat <<EOF >user_flags.py
from ryu import cfg

CONF = cfg.CONF
CONF.register_cli_opts([
cfg.StrOpt(
'user-cli-opt', default=None,
help='user original CLI option'),
])
EOF


Thanks,
Iwase
Post by Douglas Harewood-Gill
Apologies if I am asking really obvious stuff.
Thanks again,
Douglas
Hi again. I will see how I get on with the instructions you have sent. Regardless of what
happens, I will update you.
Cheers
Douglas
Hi,
Thanks, we are waiting for your report.
FYI, with the following patch, "--user-flags" option for adding your own CLI options
without modification and re-installing, but please note this patch has not be merged
into upstream yet.
This feature should be included in next release on early next month, I guess.
https://sourceforge.net/p/ryu/mailman/ryu-devel/thread/1497504689-15184-2-git-send-email-iwase.yusuke0%40gmail.com/#msg35895311
<https://sourceforge.net/p/ryu/mailman/ryu-devel/thread/1497504689-15184-2-git-send-email-iwase.yusuke0%40gmail.com/#msg35895311>
Thanks,
Iwase
Hi again. Ok, can you talk me through the second part, lets try that and see what
happens. Assuming of course it is still relevant after what we have already tried.
"So If you want to define your own CLI option,
Post by Iwase Yusuke
0. Checkout Ryu Git src (if needed).
$ git clone https://github.com/osrg/ryu.git
<https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git
<https://github.com/osrg/ryu.git>> <https://github.com/osrg/ryu.git
<https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git
<https://github.com/osrg/ryu.git>>> <https://github.com/osrg/ryu.git
<https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git
<https://github.com/osrg/ryu.git>> <https://github.com/osrg/ryu.git
<https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git
<https://github.com/osrg/ryu.git>>>>
Post by Iwase Yusuke
$ cd ryu
1. Add your definitions into "ryu/flags.py".
The syntax is the same as "oslo.config".
https://docs.openstack.org/developer/oslo.config/
<https://docs.openstack.org/developer/oslo.config/>
<https://docs.openstack.org/developer/oslo.config/
<https://docs.openstack.org/developer/oslo.config/>>
<https://docs.openstack.org/developer/oslo.config/
<https://docs.openstack.org/developer/oslo.config/>
<https://docs.openstack.org/developer/oslo.config/
<https://docs.openstack.org/developer/oslo.config/>>>
<https://docs.openstack.org/developer/oslo.config/
<https://docs.openstack.org/developer/oslo.config/>
<https://docs.openstack.org/developer/oslo.config/
<https://docs.openstack.org/developer/oslo.config/>>
<https://docs.openstack.org/developer/oslo.config/
<https://docs.openstack.org/developer/oslo.config/>
<https://docs.openstack.org/developer/oslo.config/
<https://docs.openstack.org/developer/oslo.config/>>>>
Post by Iwase Yusuke
2. Re-install Ryu at the top of Ryu directory.
$ pip install -r tools/pip-requires
$ python setup.py install
3. Confirm your own option is inserted into ryu-manager.
$ ryu-manager --help"
Cheers
Douglas
Hi Douglas,
Hi again. Apologies for the delay in responding and thank you for getting back to
me so quickly.
I finally figured out what you were telling me. So, below is what I found for each
step of the first thing you suggested.
After using "Python #" to enter the interactive interpreter I typed "import ryu"
and I received no errors, it just went to a new line with this ">>>".
For "ryu.version", it told me my version is 4.12.
For "ryu.app import ofctl_rest", and I I received no errors, it just went to a new
line with this ">>>".
Good, it seems Ryu is installed as expected.
Then, it is weired to show the following "AttributeError"...
AttributeError: 'module' object has not attribute "ofctl_rest"
"manager.main(args=['ryu.app.ofctl_rest'] + sys.argv)" will try to load "ofctl_rest"
from "ryu.app", but "ryu.app import ofctl_rest" does not return any error...
Thanks,
Iwase
Cheers
Douglas
Hi Douglas,
Post by Iwase Yusuke
Hello again. Ok, My apologies bit I really need you to simplify this for me.
Starting with the first bit.
Post by Iwase Yusuke
1) Ryu is definitely installed but do you know the command to check the
version? I have looked online but I can't find anything specific.
Post by Iwase Yusuke
2) Is there also a way to check that Ryu is installed correctly?
3) What do you mean by "import ryu" and "ryu.version"?
4) Also, "from ryu.app import ofctl_rest"?
The commands I wrote on the previous mail can check these points.
"python" command on your shell starts Python interpreter with "Interactive Mode"
https://docs.python.org/2/tutorial/interpreter.html#interactive-mode
<https://docs.python.org/2/tutorial/interpreter.html#interactive-mode>
<https://docs.python.org/2/tutorial/interpreter.html#interactive-mode
<https://docs.python.org/2/tutorial/interpreter.html#interactive-mode>>
<https://docs.python.org/2/tutorial/interpreter.html#interactive-mode
<https://docs.python.org/2/tutorial/interpreter.html#interactive-mode>
<https://docs.python.org/2/tutorial/interpreter.html#interactive-mode
<https://docs.python.org/2/tutorial/interpreter.html#interactive-mode>>>
"import ryu" and followed by other words are command (source code) for Python
interactive interpreter.
- "import ryu" checks whether Ryu is installed correctly or not.
- "ryu.version" shows version (e.g., '4.14').
- "from ryu.app import ofctl_rest" checks whether "ofctl_rest" can be imported
from your Python or not.
$ python # start Python interactive interpreter
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
import ryu # checks if "ryu" is installed or not
ryu.version # show version info
'4.14'
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
from ryu.app import ofctl_rest # Can import "ofctl_rest"?
Thanks,
Iwase
Post by Iwase Yusuke
I will see if I can work through this first to see if I can get it working
this way before I look at the second bit. :D
Post by Iwase Yusuke
Thank you for your time and patience so far.
Cheers
Douglas
Hi Douglas,
'module' object has not attribute "ofctl_rest" but it was worth trying so thank you.
Post by Iwase Yusuke
Hmmm... 'ryu.app.ofctl_rest' means the Python module path to Ryu's
built-in app.
Post by Iwase Yusuke
If it got AttributeError, Ryu might not be installed successfully.
I recommend you to confirm Ryu is installed
$ python
Post by Douglas Harewood-Gill
import ryu # Can import "ryu"?
ryu.version # Which version?
'4.14'
Post by Douglas Harewood-Gill
from ryu.app import ofctl_rest # Can import "ofctl_rest"?
Regarding the instructions you sent me for altering Ryu, is there any
chance you could explain them a bit more please? I am having a little trouble following them
currently.
Post by Iwase Yusuke
Sure.
Ryu defines the CLI options in some modules, the most accessible among
them is
Post by Iwase Yusuke
"ryu/flags.py", I guess.
https://github.com/osrg/ryu/blob/master/ryu/flags.py
<https://github.com/osrg/ryu/blob/master/ryu/flags.py>
<https://github.com/osrg/ryu/blob/master/ryu/flags.py
<https://github.com/osrg/ryu/blob/master/ryu/flags.py>>
<https://github.com/osrg/ryu/blob/master/ryu/flags.py
<https://github.com/osrg/ryu/blob/master/ryu/flags.py>
<https://github.com/osrg/ryu/blob/master/ryu/flags.py
<https://github.com/osrg/ryu/blob/master/ryu/flags.py>>>
<https://github.com/osrg/ryu/blob/master/ryu/flags.py
<https://github.com/osrg/ryu/blob/master/ryu/flags.py>
<https://github.com/osrg/ryu/blob/master/ryu/flags.py
<https://github.com/osrg/ryu/blob/master/ryu/flags.py>>
<https://github.com/osrg/ryu/blob/master/ryu/flags.py
<https://github.com/osrg/ryu/blob/master/ryu/flags.py>
<https://github.com/osrg/ryu/blob/master/ryu/flags.py
<https://github.com/osrg/ryu/blob/master/ryu/flags.py>>>>
Post by Iwase Yusuke
But to reflect your changes, you need to "re-install" Ryu before running your
applications.
So If you want to define your own CLI option,
0. Checkout Ryu Git src (if needed).
$ git clone https://github.com/osrg/ryu.git
<https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git
<https://github.com/osrg/ryu.git>> <https://github.com/osrg/ryu.git
<https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git
<https://github.com/osrg/ryu.git>>> <https://github.com/osrg/ryu.git
<https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git
<https://github.com/osrg/ryu.git>> <https://github.com/osrg/ryu.git
<https://github.com/osrg/ryu.git> <https://github.com/osrg/ryu.git
<https://github.com/osrg/ryu.git>>>>
Post by Iwase Yusuke
$ cd ryu
1. Add your definitions into "ryu/flags.py".
The syntax is the same as "oslo.config".
https://docs.openstack.org/developer/oslo.config/
<https://docs.openstack.org/developer/oslo.config/>
<https://docs.openstack.org/developer/oslo.config/
<https://docs.openstack.org/developer/oslo.config/>>
<https://docs.openstack.org/developer/oslo.config/
<https://docs.openstack.org/developer/oslo.config/>
<https://docs.openstack.org/developer/oslo.config/
<https://docs.openstack.org/developer/oslo.config/>>>
<https://docs.openstack.org/developer/oslo.config/
<https://docs.openstack.org/developer/oslo.config/>
<https://docs.openstack.org/developer/oslo.config/
<https://docs.openstack.org/developer/oslo.config/>>
<https://docs.openstack.org/developer/oslo.config/
<https://docs.openstack.org/developer/oslo.config/>
<https://docs.openstack.org/developer/oslo.config/
<https://docs.openstack.org/developer/oslo.config/>>>>
Post by Iwase Yusuke
2. Re-install Ryu at the top of Ryu directory.
$ pip install -r tools/pip-requires
$ python setup.py install
3. Confirm your own option is inserted into ryu-manager.
$ ryu-manager --help
Thanks,
Iwase
Post by Douglas Harewood-Gill
Thank you :)
Douglas
Hi Douglas,
Hmmm... how about swapping the order of arguments?
e.g)
manager.main(args=['ryu.app.ofctl_rest'] + sys.argv)
FYI, I guess Dr.Bernstein did "hack"(used "ryu.cmd.manager"
directly) in order to
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
add original CLI option like "--netfile" and "--widest_paths".
On the other hand, you can add your original CLI option as following.
$ git diff
diff --git a/ryu/flags.py b/ryu/flags.py
index 69eb3d2..ebf16c8 100644
--- a/ryu/flags.py
+++ b/ryu/flags.py
@@ -112,3 +112,10 @@ CONF.register_cli_opts([
help='Initial Router ID used by Zebra protocol service '
'(default: %s)' % DEFAULT_ZSERV_ROUTER_ID),
], group='zapi')
+
+CONF.register_cli_opts([
+ cfg.StrOpt(
+ 'netfile', default=None, help='network json file'),
+ cfg.BoolOpt(
+ 'widest_paths', default=False, help='Use widest path.'),
+])
Please note you need to re-install Ryu after the above modifications.
$ python setup.py install
Then, with this modification, you can run
"l2DestForwardStaticRyu.py" as the
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
$ ryu-manager --help
...(snip)...
--netfile NETFILE network json file
...(snip)...
--widest_paths Use widest path.
...(snip)...
$ ryu-manager l2DestForwardStaticRyu.py ryu.app.ofctl_rest
--netfile=ExNetwithLoops1A.json --widest_paths
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Thanks,
Iwase
Hi Iwase and thank you for getting back to me. The author of this
program, Dr Bernstein added this line "from ryu.cmd import manager" which as far as I
understand directly starts Ryu from within side L2DestForwardStaticRyu.py. Should be around
line 29 I think. He had to do this he told me because he could not start the program in the
conventional way because he needed to import the "ExNetwithLoops!A.json file" for the
topology with static mac and IP addresses. Apparently he could not do this just using the
standard Ryu format of starting the Ryu Manager with the Controller file and then with REST.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
I tried your suggestion by removing "manager.main(args=sys.argv)"
from " if __name__ == "__main__": "
and using the following:-
"manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])" and I got
the following error message in the terminal.
ryu.app.ofctl_rest"
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Any advice would be welcome. I am obviously going to see what I
can find here and will let you know if I find anything relevant.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Cheers
Douglas
Hi Douglas,
I checked "L2DestForwardStaticRyu.py", and it seems to be
"hacked" to run
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
app without "ryu-manager".
To start the built-in Ryu application with
"L2DestForwardStaticRyu.py",
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
how about the following?
The following appends to "ofctl_rest" app to the argument of
"manager".
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
- manager.main(args=sys.argv)
+ manager.main(args=sys.argv + ['ryu.app.ofctl_rest'])
Thanks,
Iwase
Hi Iwase. Thank you for contacting me and apologies for my
delay in responding. I have tried what you have suggested but the problem I have is that the
L2DestForwardStaticRyu.py program is designed to run on its own. It imports the the ryu.cmd
import manager and uses the Ryu controller but you start it by typing "|python
l2DestForwardStaticRyu.py --netfile=ExNetwithLoops1A.json" |where it imports
=ExNetWithLoops1A.Json.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
When this program is started, it automatically loads Ryu
and implements the code within this program. I am not sure how to start the this and
ryu.app.ofctl_rest at the same time. I have tried starting them separately in different
terminals but that did not work.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Thank you also for the information you have sent. I have
looked at it before but I do not know how to implement this with my custom code. I have been
looking for examples but they seem to be few and far between. Any advice as always would be
greatly appreciated.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Thanks again.
Douglas
On 8 June 2017 at 01:27, Iwase Yusuke
Hi Douglas,
Excuse me for cutting in.
Just for getting flow statistics, how about running
your app and ofctl_rest
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
together as Fujimoto said.
e.g.)
$ ryu-manager your_app.py ryu.app.ofctl_rest
If you want to implement your own REST APIs on your
app, Ryu-Book is the
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
most helpful as far as I know.
(You might already be aware of this though...)
http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>
<http://osrg.github.io/ryu-book/en/html/rest_api.html
<http://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
FYI, here is an sample implementation on
simple_switch_13.py for getting
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
flow statistics.
The usage of "WSGI" framework is described on Ryu-Book.
$ git diff
diff --git a/ryu/app/simple_switch_13.py
b/ryu/app/simple_switch_13.py
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
index 3e7c598..f33e474 100644
--- a/ryu/app/simple_switch_13.py
+++ b/ryu/app/simple_switch_13.py
@@ -13,6 +13,8 @@
# See the License for the specific language governing
permissions and
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
# limitations under the License.
+import json
+
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import CONFIG_DISPATCHER,
MAIN_DISPATCHER
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
@@ -21,14 +23,26 @@ from ryu.ofproto import ofproto_v1_3
from ryu.lib.packet import packet
from ryu.lib.packet import ethernet
from ryu.lib.packet import ether_types
+from ryu.app.ofctl import api as ofctl_api
+from ryu.app.wsgi import ControllerBase
+from ryu.app.wsgi import Response
+from ryu.app.wsgi import route
+from ryu.app.wsgi import WSGIApplication
+
+
+_URI_PREFIX = '/simpleswitch/stats/{dpid}'
OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
+ _CONTEXTS = {'wsgi': WSGIApplication}
super(SimpleSwitch13, self).__init__(*args,
**kwargs)
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
self.mac_to_port = {}
+ wsgi = kwargs['wsgi']
+ wsgi.register(SimpleSwitchController,
+ {SimpleSwitch13.__name__: self})
@set_ev_cls(ofp_event.EventOFPSwitchFeatures,
CONFIG_DISPATCHER)
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
@@ -117,3 +131,32 @@ class
out = parser.OFPPacketOut(datapath=datapath,
buffer_id=msg.buffer_id,
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
in_port=in_port,
actions=actions, data=data)
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
datapath.send_msg(out)
+
+ datapath = ofctl_api.get_datapath(self, dpid)
+ return None
+
+ parser = datapath.ofproto_parser
+ req = parser.OFPFlowStatsRequest(datapath)
+
+ rep = ofctl_api.send_msg(
+ app=self, msg=req,
+ reply_cls=parser.OFPFlowStatsReply,
reply_multi=True)
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+ return [r.to_jsondict() for r in rep]
+
+
+
+ super(SimpleSwitchController,
self).__init__(req, link, data, **config)
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+ self.simple_switch_app =
data[SimpleSwitch13.__name__]
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
+
+ dpid = int(str(kwargs['dpid']))
+ ret = self.simple_switch_app.get_flow_stats(dpid)
+ return Response(status=404)
+
+ return
Response(content_type='application/json', body=json.dumps(ret))
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
$ ryu-manager ryu/app/simple_switch_13.py
Registered VCS backend: git
Registered VCS backend: hg
Registered VCS backend: svn
Registered VCS backend: bzr
loading app ryu/app/simple_switch_13.py
loading app ryu.controller.ofp_handler
loading app ryu.app.ofctl.service
loading app ryu.controller.ofp_handler
creating context wsgi
instantiating app ryu.app.ofctl.service of OfctlService
instantiating app ryu/app/simple_switch_13.py of
SimpleSwitch13
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
instantiating app ryu.controller.ofp_handler of OFPHandler
(10332) wsgi starting up on http://0.0.0.0:8080
...
$ curl -X GET
http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>>>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>>>>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>
<http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1>>>> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1>>> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1>>>>>>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>>>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>
<http://localhost:8080/simpleswitch/stats/1 <http://localhost:8080/simpleswitch/stats/1>>
<http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1>>> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1>>>>> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1>>> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1>>>> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1>>> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1>> <http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1>
<http://localhost:8080/simpleswitch/stats/1
<http://localhost:8080/simpleswitch/stats/1>>>>>>> | python -m json.tool
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
[
{
"OFPFlowStatsReply": {
"body": [
{
"OFPFlowStats": {
"byte_count": 140,
"cookie": 0,
"duration_nsec": 771000000,
"duration_sec": 1,
"flags": 0,
"hard_timeout": 0,
"idle_timeout": 0,
"instructions": [
{
"OFPInstructionActions": {
"actions": [
{
"OFPActionOutput": {
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
"len": 16,
"max_len": 65535,
4294967293,
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
"type": 0
}
}
],
"len": 24,
"type": 4
}
}
],
"length": 80,
"match": {
"OFPMatch": {
"length": 4,
"oxm_fields": [],
"type": 1
}
},
"packet_count": 2,
"priority": 0,
"table_id": 0
}
}
],
"flags": 0,
"type": 1
}
}
]
Thanks,
Iwase
Post by Douglas Harewood-Gill
Hi there. That is fantastic. Sounds exactly like what
I am looking for so thank you.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
One last question for the minute. I know you provided
a link but how do you implement this with custom Ryu controller code?
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
My apologies if I am asking something really obvious.
Cheers
Douglas
On 7 June 2017 at 01:15, Fujimoto Satoshi
Hi, Douglas
Ryu has ofctl_rest.py, which is a sample
application and provides REST API to get flow statistics.
http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>>>>
Post by Iwase Yusuke
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html
<http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html>>>>>>>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I think it is better to use ofctl_rest.py than to
implement your own REST API in your app.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thanks,
Fujimoto
Post by Douglas Harewood-Gill
Greetings I am a PhD student new to both Python
and Ryu and I was wondering if anyone could give me some advice.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
I am using the Ryu controller program
(L2DestForwardStaticRyu.py) provided by Dr Grey Bernstein
(https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu
<https://www.grotto-networking.com/SDNfun.html#programming-switches-with-ryu>>>>>>>>) for
shortest path computation for a full Mesh network in Mininet but the example provided does
not include REST which I require to be able to collect flow statistics such as the flows in
each router,
Post by Iwase Yusuke
bandwidth, latency, etc.
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Unfortunately I have been looking and with the
exception of (https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>>>
Post by Iwase Yusuke
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>
<https://osrg.github.io/ryu-book/en/html/rest_api.html
<https://osrg.github.io/ryu-book/en/html/rest_api.html>>>>>>>>) which seems
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
overly specific, I am unable to find a good example that would
allow me to work out how to integrate REST into the above Ryu control program.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
So if anyone can point me in the right direction
or can provide some examples, I would be most grateful.
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Thank you for your time.
Best Regards
Douglas
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University
of Bristol
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers'
Building, Woodland Road, Clifton, Bristol. BS8 1UB
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of
the world's most
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org!
http://sdm.link/slashdot
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>>>
Post by Iwase Yusuke
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>>>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of
Bristol
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building,
Woodland Road, Clifton, Bristol. BS8 1UB
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the
world's most
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
engaging tech sites, Slashdot.org!
http://sdm.link/slashdot
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Post by Douglas Harewood-Gill
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building,
Woodland Road, Clifton, Bristol. BS8 1UB
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland
Road, Clifton, Bristol. BS8 1UB
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>>
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road,
Clifton, Bristol. BS8 1UB
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Post by Iwase Yusuke
Post by Douglas Harewood-Gill
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>>
Post by Iwase Yusuke
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton,
Bristol. BS8 1UB
Post by Iwase Yusuke
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton,
Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
<https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
<https://lists.sourceforge.net/lists/listinfo/ryu-devel>
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
--
*Douglas Harewood-Gill MSc MIET*
CDT Student in Communications (PhD), University of Bristol
Post-Graduate Student (Taught and Research)
*
CDT Communications*
University of Bristol, Merchant Venturers' Building, Woodland Road, Clifton, Bristol. BS8 1UB
http://www.bristol.ac.uk/
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
https://lists.sourceforge.net/lists/listinfo/ryu-devel
Loading...