thank you for your comment. I was just thinking that was like reinventing the wheel. I will try to replace them shortly.
On Wed, 8 Jan 2014 14:49:39 +0900 (JST) YAMAMOTO Takashi <[email protected]> wrote: > how about using ofp_msg_from_jsondict? > stringify stuff is intended to replace the most of ofctl. > > YAMAMOTO Takashi > >> this patch makes ofctl_rest enable use of OFPExperimenter message. >> >> usage) >> >> URI: /stats/experimenter/{dpid} >> method: POST >> >> the message body is as follows: >> >> experimenter Experimenter ID. (default: 0) >> exp_type Experimenter defined type. (default:0) >> data_type Data encoding type. 'ascii' or 'base64'. (default: 'ascii') >> data Experimenter-defined arbitrary additional data. (default: >> '') >> >> e.g.) >> >> curl -X POST -d '{"experimenter": 8992, >> "exp_type": 10, >> "data": "\x00\x00\x00\x01"}' >> http://localhost:8080/stats/experimenter/1 >> >> curl -X POST -d '{"experimenter": 8992, >> "exp_type": 10. >> "data_type": "base64", >> "data": "AAAAAQ=="}' >> http://localhost:8080/stats/experimenter/1 >> >> Signed-off-by: Yuichi Ito <[email protected]> >> --- >> ryu/app/ofctl_rest.py | 30 ++++++++++++++++++++++++++++++ >> ryu/lib/ofctl_v1_2.py | 17 +++++++++++++++++ >> ryu/lib/ofctl_v1_3.py | 17 +++++++++++++++++ >> 3 files changed, 64 insertions(+) >> >> diff --git a/ryu/app/ofctl_rest.py b/ryu/app/ofctl_rest.py >> index b9656b1..8ab53f9 100644 >> --- a/ryu/app/ofctl_rest.py >> +++ b/ryu/app/ofctl_rest.py >> @@ -81,6 +81,10 @@ LOG = logging.getLogger('ryu.app.ofctl_rest') >> # >> # delete a meter entry >> # POST /stats/meterentry/delete >> +# >> +# >> +# send a experimeter message >> +# POST /stats/experimenter/<dpid> >> >> >> class StatsController(ControllerBase): >> @@ -269,6 +273,27 @@ class StatsController(ControllerBase): >> >> return Response(status=200) >> >> + def send_experimenter(self, req, dpid, **_kwargs): >> + dp = self.dpset.get(int(dpid)) >> + if dp is None: >> + return Response(status=404) >> + >> + try: >> + exp = eval(req.body) >> + except SyntaxError: >> + LOG.debug('invalid syntax %s', req.body) >> + return Response(status=400) >> + >> + if dp.ofproto.OFP_VERSION == ofproto_v1_2.OFP_VERSION: >> + ofctl_v1_2.send_experimenter(dp, exp) >> + elif dp.ofproto.OFP_VERSION == ofproto_v1_3.OFP_VERSION: >> + ofctl_v1_3.send_experimenter(dp, exp) >> + else: >> + LOG.debug('Unsupported OF protocol') >> + return Response(status=501) >> + >> + return Response(status=200) >> + >> >> class RestStatsApi(app_manager.RyuApp): >> OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION, >> @@ -341,6 +366,11 @@ class RestStatsApi(app_manager.RyuApp): >> controller=StatsController, >> action='mod_meter_entry', >> conditions=dict(method=['POST'])) >> >> + uri = path + '/experimenter/{dpid}' >> + mapper.connect('stats', uri, >> + controller=StatsController, >> action='send_experimenter', >> + conditions=dict(method=['POST'])) >> + >> def stats_reply_handler(self, ev): >> msg = ev.msg >> dp = msg.datapath >> diff --git a/ryu/lib/ofctl_v1_2.py b/ryu/lib/ofctl_v1_2.py >> index 6eb2981..660832a 100644 >> --- a/ryu/lib/ofctl_v1_2.py >> +++ b/ryu/lib/ofctl_v1_2.py >> @@ -13,6 +13,7 @@ >> # See the License for the specific language governing permissions and >> # limitations under the License. >> >> +import base64 >> import struct >> import socket >> import logging >> @@ -367,3 +368,19 @@ def mod_flow_entry(dp, flow, cmd): >> flags, match, inst) >> >> dp.send_msg(flow_mod) >> + >> + >> +def send_experimenter(dp, exp): >> + experimenter = exp.get('experimenter', 0) >> + exp_type = exp.get('exp_type', 0) >> + data_type = exp.get('data_type', 'ascii') >> + if data_type != 'ascii' and data_type != 'base64': >> + LOG.debug('Unknown data type: %s', data_type) >> + data = exp.get('data', '') >> + if data_type == 'base64': >> + data = base64.b64decode(data) >> + >> + expmsg = dp.ofproto_parser.OFPExperimenter( >> + dp, experimenter, exp_type, data) >> + >> + dp.send_msg(expmsg) >> diff --git a/ryu/lib/ofctl_v1_3.py b/ryu/lib/ofctl_v1_3.py >> index 7d2c9fb..f983624 100644 >> --- a/ryu/lib/ofctl_v1_3.py >> +++ b/ryu/lib/ofctl_v1_3.py >> @@ -13,6 +13,7 @@ >> # See the License for the specific language governing permissions and >> # limitations under the License. >> >> +import base64 >> import struct >> import socket >> import logging >> @@ -640,3 +641,19 @@ def mod_meter_entry(dp, flow, cmd): >> dp, cmd, flags, meter_id, bands) >> >> dp.send_msg(meter_mod) >> + >> + >> +def send_experimenter(dp, exp): >> + experimenter = exp.get('experimenter', 0) >> + exp_type = exp.get('exp_type', 0) >> + data_type = exp.get('data_type', 'ascii') >> + if data_type != 'ascii' and data_type != 'base64': >> + LOG.debug('Unknown data type: %s', data_type) >> + data = exp.get('data', '') >> + if data_type == 'base64': >> + data = base64.b64decode(data) >> + >> + expmsg = dp.ofproto_parser.OFPExperimenter( >> + dp, experimenter, exp_type, data) >> + >> + dp.send_msg(expmsg) >> -- >> 1.7.10.4 >> >> >> ------------------------------------------------------------------------------ >> Rapidly troubleshoot problems before they affect your business. Most IT >> organizations don't have a clear picture of how application performance >> affects their revenue. With AppDynamics, you get 100% visibility into your >> Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics >> Pro! >> http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk >> _______________________________________________ >> Ryu-devel mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/ryu-devel ------------------------------------------------------------------------------ Rapidly troubleshoot problems before they affect your business. Most IT organizations don't have a clear picture of how application performance affects their revenue. With AppDynamics, you get 100% visibility into your Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro! http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk _______________________________________________ Ryu-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ryu-devel
