diff options
-rw-r--r-- | ryu/app/ofctl_rest.py | 34 | ||||
-rw-r--r-- | ryu/lib/ofctl_v1_0.py | 16 | ||||
-rw-r--r-- | ryu/lib/ofctl_v1_2.py | 17 | ||||
-rw-r--r-- | ryu/lib/ofctl_v1_3.py | 17 |
4 files changed, 72 insertions, 12 deletions
diff --git a/ryu/app/ofctl_rest.py b/ryu/app/ofctl_rest.py index 5513e470..8ed4e832 100644 --- a/ryu/app/ofctl_rest.py +++ b/ryu/app/ofctl_rest.py @@ -79,7 +79,11 @@ supported_ofctl = { # Note: Specification of port number is optional # # get queues stats of the switch -# GET /stats/queue/<dpid> +# GET /stats/queue/<dpid>[/<port>[/<queue_id>]] +# Note: Specification of port number and queue id are optional +# If you want to omitting the port number and setting the queue id, +# please specify the keyword "ALL" to the port number +# e.g. GET /stats/queue/1/ALL/1 # # get queues config stats of the switch # GET /stats/queueconfig/<dpid>/<port> @@ -338,12 +342,26 @@ class StatsController(ControllerBase): body = json.dumps(ports) return Response(content_type='application/json', body=body) - def get_queue_stats(self, req, dpid, **_kwargs): + def get_queue_stats(self, req, dpid, port=None, queue_id=None, **_kwargs): if type(dpid) == str and not dpid.isdigit(): LOG.debug('invalid dpid %s', dpid) return Response(status=400) + if port == "ALL": + port = None + + if type(port) == str and not port.isdigit(): + LOG.debug('invalid port %s', port) + return Response(status=400) + + if queue_id == "ALL": + queue_id = None + + if type(queue_id) == str and not queue_id.isdigit(): + LOG.debug('invalid queue_id %s', queue_id) + return Response(status=400) + dp = self.dpset.get(int(dpid)) if dp is None: @@ -353,7 +371,7 @@ class StatsController(ControllerBase): _ofctl = supported_ofctl.get(_ofp_version, None) if _ofctl is not None: - queues = _ofctl.get_queue_stats(dp, self.waiters) + queues = _ofctl.get_queue_stats(dp, self.waiters, port, queue_id) else: LOG.debug('Unsupported OF protocol') @@ -914,6 +932,16 @@ class RestStatsApi(app_manager.RyuApp): controller=StatsController, action='get_queue_stats', conditions=dict(method=['GET'])) + uri = path + '/queue/{dpid}/{port}' + mapper.connect('stats', uri, + controller=StatsController, action='get_queue_stats', + conditions=dict(method=['GET'])) + + uri = path + '/queue/{dpid}/{port}/{queue_id}' + mapper.connect('stats', uri, + controller=StatsController, action='get_queue_stats', + conditions=dict(method=['GET'])) + uri = path + '/queueconfig/{dpid}/{port}' mapper.connect('stats', uri, controller=StatsController, action='get_queue_config', diff --git a/ryu/lib/ofctl_v1_0.py b/ryu/lib/ofctl_v1_0.py index c085070e..5fe5778d 100644 --- a/ryu/lib/ofctl_v1_0.py +++ b/ryu/lib/ofctl_v1_0.py @@ -314,9 +314,19 @@ def get_desc_stats(dp, waiters): return desc -def get_queue_stats(dp, waiters): - stats = dp.ofproto_parser.OFPQueueStatsRequest(dp, 0, dp.ofproto.OFPP_ALL, - dp.ofproto.OFPQ_ALL) +def get_queue_stats(dp, waiters, port=None, queue_id=None): + if port is None: + port = dp.ofproto.OFPP_ALL + else: + port = int(str(port), 0) + + if queue_id is None: + queue_id = dp.ofproto.OFPQ_ALL + else: + queue_id = int(str(queue_id), 0) + + stats = dp.ofproto_parser.OFPQueueStatsRequest(dp, 0, port, + queue_id) msgs = [] send_stats_request(dp, stats, waiters, msgs) diff --git a/ryu/lib/ofctl_v1_2.py b/ryu/lib/ofctl_v1_2.py index c25dee8d..cd643781 100644 --- a/ryu/lib/ofctl_v1_2.py +++ b/ryu/lib/ofctl_v1_2.py @@ -432,10 +432,21 @@ def get_desc_stats(dp, waiters): return desc -def get_queue_stats(dp, waiters): +def get_queue_stats(dp, waiters, port=None, queue_id=None): ofp = dp.ofproto - stats = dp.ofproto_parser.OFPQueueStatsRequest(dp, ofp.OFPP_ANY, - ofp.OFPQ_ALL, 0) + + if port is None: + port = ofp.OFPP_ANY + else: + port = int(str(port), 0) + + if queue_id is None: + queue_id = ofp.OFPQ_ALL + else: + queue_id = int(str(queue_id), 0) + + stats = dp.ofproto_parser.OFPQueueStatsRequest(dp, port, + queue_id, 0) msgs = [] send_stats_request(dp, stats, waiters, msgs) diff --git a/ryu/lib/ofctl_v1_3.py b/ryu/lib/ofctl_v1_3.py index 286c4e66..d94a9dc4 100644 --- a/ryu/lib/ofctl_v1_3.py +++ b/ryu/lib/ofctl_v1_3.py @@ -470,10 +470,21 @@ def get_desc_stats(dp, waiters): return desc -def get_queue_stats(dp, waiters): +def get_queue_stats(dp, waiters, port=None, queue_id=None): ofp = dp.ofproto - stats = dp.ofproto_parser.OFPQueueStatsRequest(dp, 0, ofp.OFPP_ANY, - ofp.OFPQ_ALL) + + if port is None: + port = ofp.OFPP_ANY + else: + port = int(str(port), 0) + + if queue_id is None: + queue_id = ofp.OFPQ_ALL + else: + queue_id = int(str(queue_id), 0) + + stats = dp.ofproto_parser.OFPQueueStatsRequest(dp, 0, port, + queue_id) msgs = [] send_stats_request(dp, stats, waiters, msgs) |