my bad, I will correct the description and repost soon.
please do not mind this mail.

On Fri, 20 Dec 2013 16:04:33 +0900
Yuichi Ito <[email protected]> wrote:

> e.g., when you send a MeterMod message as:
> 
>      curl -X POST -d '{"dpid": 1,
>                        "meter_id": 1,
>                        "flags": "KBPS",
>                        "bands": [{"type": "DROP", "rate": 1000},
>                                  {"type": "REMARK", "rate": 2000},
>                                  {"type": "EXPERIMENTER", "rate": 3000}
>                        ]}' http://localhost:8080/stats/meterentry/add
> 
> and you do the following command:
> 
>      curl http://localhost:8080/stats/meterconfig/1
> 
> then you will the configuration as:
> 
>      {"1": [{"bands": [{"burst_size": 0, "rate": 1000, "type": "DROP"},
>                        {"prec_level": 0, "burst_size": 0, "rate": 2000, 
> "type": "REMARK"},
>                        {"burst_size": 0, "rate": 3000, "experimenter": 0, 
> "type": "EXPERIMENTER"}],
>              "flags": "KBPS",
>              "meter_id": 1}]}
> 
> Signed-off-by: Yuichi Ito <[email protected]>
> ---
>   ryu/app/ofctl_rest.py |   28 ++++++++++++++++++++++++++--
>   ryu/lib/ofctl_v1_3.py |   36 ++++++++++++++++++++++++++++++++++++
>   2 files changed, 62 insertions(+), 2 deletions(-)
> 
> diff --git a/ryu/app/ofctl_rest.py b/ryu/app/ofctl_rest.py
> index 788714d..61e99ed 100644
> --- a/ryu/app/ofctl_rest.py
> +++ b/ryu/app/ofctl_rest.py
> @@ -51,6 +51,9 @@ LOG = logging.getLogger('ryu.app.ofctl_rest')
>   # get meter features stats of the switch
>   # GET /stats/meterfeatures/<dpid>
>   #
> +# get meter config stats of the switch
> +# GET /stats/meterconfig/<dpid>
> +#
>   # get meters stats of the switch
>   # GET /stats/meter/<dpid>
>   #
> @@ -77,8 +80,6 @@ LOG = logging.getLogger('ryu.app.ofctl_rest')
>   # delete a meter entry
>   # POST /stats/meterentry/delete
> 
> -# TODO: support OFPMeterConfigStats
> -
> 
>   class StatsController(ControllerBase):
>       def __init__(self, req, link, data, **config):
> @@ -153,6 +154,20 @@ class StatsController(ControllerBase):
>           body = json.dumps(meters)
>           return (Response(content_type='application/json', body=body))
> 
> +    def get_meter_config(self, req, dpid, **_kwargs):
> +        dp = self.dpset.get(int(dpid))
> +        if dp is None:
> +            return Response(status=404)
> +
> +        if dp.ofproto.OFP_VERSION == ofproto_v1_3.OFP_VERSION:
> +            meters = ofctl_v1_3.get_meter_config(dp, self.waiters)
> +        else:
> +            LOG.debug('Unsupported OF protocol')
> +            return Response(status=501)
> +
> +        body = json.dumps(meters)
> +        return (Response(content_type='application/json', body=body))
> +
>       def get_meter_stats(self, req, dpid, **_kwargs):
>           dp = self.dpset.get(int(dpid))
>           if dp is None:
> @@ -288,6 +303,11 @@ class RestStatsApi(app_manager.RyuApp):
>                          controller=StatsController, 
> action='get_meter_features',
>                          conditions=dict(method=['GET']))
> 
> +        uri = path + '/meterconfig/{dpid}'
> +        mapper.connect('stats', uri,
> +                       controller=StatsController, action='get_meter_config',
> +                       conditions=dict(method=['GET']))
> +
>           uri = path + '/meter/{dpid}'
>           mapper.connect('stats', uri,
>                          controller=StatsController, action='get_meter_stats',
> @@ -349,3 +369,7 @@ class RestStatsApi(app_manager.RyuApp):
>       @set_ev_cls(ofp_event.EventOFPMeterFeaturesStatsReply, MAIN_DISPATCHER)
>       def meter_features_stats_reply_handler(self, ev):
>           self.stats_reply_handler(ev)
> +
> +    @set_ev_cls(ofp_event.EventOFPMeterConfigStatsReply, MAIN_DISPATCHER)
> +    def meter_config_stats_reply_handler(self, ev):
> +        self.stats_reply_handler(ev)
> diff --git a/ryu/lib/ofctl_v1_3.py b/ryu/lib/ofctl_v1_3.py
> index 37f67d0..7e538b6 100644
> --- a/ryu/lib/ofctl_v1_3.py
> +++ b/ryu/lib/ofctl_v1_3.py
> @@ -479,6 +479,42 @@ def get_meter_features(dp, waiters):
>       return features
> 
> 
> +def get_meter_config(dp, waiters):
> +    flags = {dp.ofproto.OFPMF_KBPS: 'KBPS',
> +             dp.ofproto.OFPMF_PKTPS: 'PKTPS',
> +             dp.ofproto.OFPMF_BURST: 'BURST',
> +             dp.ofproto.OFPMF_STATS: 'STATS'}
> +
> +    band_type = {dp.ofproto.OFPMBT_DROP: 'DROP',
> +                 dp.ofproto.OFPMBT_DSCP_REMARK: 'REMARK',
> +                 dp.ofproto.OFPMBT_EXPERIMENTER: 'EXPERIMENTER'}
> +
> +    stats = dp.ofproto_parser.OFPMeterConfigStatsRequest(
> +        dp, 0, dp.ofproto.OFPM_ALL)
> +    msgs = []
> +    send_stats_request(dp, stats, waiters, msgs)
> +
> +    configs = []
> +    for msg in msgs:
> +        for config in msg.body:
> +            bands = []
> +            for band in config.bands:
> +                b = {'type': band_type.get(band.type, ''),
> +                     'rate': band.rate,
> +                     'burst_size': band.burst_size}
> +                if band.type == dp.ofproto.OFPMBT_DSCP_REMARK:
> +                    b['prec_level'] = band.prec_level
> +                elif band.type == dp.ofproto.OFPMBT_EXPERIMENTER:
> +                    b['experimenter'] = band.experimenter
> +                bands.append(b)
> +            c = {'flags': flags.get(config.flags, 0),
> +                 'meter_id': config.meter_id,
> +                 'bands': bands}
> +            configs.append(c)
> +    configs = {str(dp.id): configs}
> +    return configs
> +
> +
>   def mod_flow_entry(dp, flow, cmd):
>       cookie = int(flow.get('cookie', 0))
>       cookie_mask = int(flow.get('cookie_mask', 0))
> 


 

------------------------------------------------------------------------------
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

Reply via email to