From 4053093ee4727a03c73af8693cc99ae85055f805 Mon Sep 17 00:00:00 2001 From: Claudio-Daniel Freire Date: Tue, 29 May 2012 21:59:05 -0300 Subject: [PATCH] LoggingClassQueueFilter metadata --- src/nepi/testbeds/planetlab/execute.py | 3 +++ src/nepi/testbeds/planetlab/interfaces.py | 17 ++++++++++++++++ src/nepi/testbeds/planetlab/metadata.py | 24 ++++++++++++++++++++--- 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/nepi/testbeds/planetlab/execute.py b/src/nepi/testbeds/planetlab/execute.py index 467d9fee..c04bba59 100644 --- a/src/nepi/testbeds/planetlab/execute.py +++ b/src/nepi/testbeds/planetlab/execute.py @@ -778,6 +778,9 @@ class TestbedController(testbed_impl.TestbedController): def _make_class_queue_filter(self, parameters): return self._make_generic(parameters, self._interfaces.ClassQueueFilter) + def _make_logging_class_queue_filter(self, parameters): + return self._make_generic(parameters, self._interfaces.LoggingClassQueueFilter) + def _make_tos_queue_filter(self, parameters): return self._make_generic(parameters, self._interfaces.ToSQueueFilter) diff --git a/src/nepi/testbeds/planetlab/interfaces.py b/src/nepi/testbeds/planetlab/interfaces.py index 60295e2f..789d8ea4 100644 --- a/src/nepi/testbeds/planetlab/interfaces.py +++ b/src/nepi/testbeds/planetlab/interfaces.py @@ -578,6 +578,23 @@ class ClassQueueFilter(TunFilter): # Attributes self.module = "classqueue.py" +class LoggingClassQueueFilter(ClassQueueFilter): + _TRACEMAP = ClassQueueFilter._TRACEMAP.copy() + _TRACEMAP.update({ + # tracename : (remotename, localname) + 'queue_stats' : ('queue_stats', 'queue_stats') + }) + + def __init__(self, api=None): + super(LoggingClassQueueFilter, self).__init__(api) + # Attributes + self.module = "loggingclassqueue.py" + + # Inject outpath + args = dict(map(lambda x:x.split('=',1),self.args.split(','))) + args["outpath"] = "queue_stats" + self.args = ",".join(map("=".join, args.iteritems())) + class ToSQueueFilter(TunFilter): def __init__(self, api=None): super(ToSQueueFilter, self).__init__(api) diff --git a/src/nepi/testbeds/planetlab/metadata.py b/src/nepi/testbeds/planetlab/metadata.py index 5e073200..f657d44a 100644 --- a/src/nepi/testbeds/planetlab/metadata.py +++ b/src/nepi/testbeds/planetlab/metadata.py @@ -30,14 +30,15 @@ INTERNET = "Internet" NETPIPE = "NetPipe" TUNFILTER = "TunFilter" CLASSQUEUEFILTER = "ClassQueueFilter" +LOGGINGCLASSQUEUEFILTER = "LoggingClassQueueFilter" TOSQUEUEFILTER = "TosQueueFilter" MULTICASTFORWARDER = "MulticastForwarder" MULTICASTANNOUNCER = "MulticastAnnouncer" MULTICASTROUTER = "MulticastRouter" -TUNFILTERS = (TUNFILTER, CLASSQUEUEFILTER, TOSQUEUEFILTER) +TUNFILTERS = (TUNFILTER, CLASSQUEUEFILTER, LOGGINGCLASSQUEUEFILTER, TOSQUEUEFILTER) TAPFILTERS = (TUNFILTER, ) -ALLFILTERS = (TUNFILTER, CLASSQUEUEFILTER, TOSQUEUEFILTER) +ALLFILTERS = (TUNFILTER, CLASSQUEUEFILTER, LOGGINGCLASSQUEUEFILTER, TOSQUEUEFILTER) PL_TESTBED_ID = "planetlab" @@ -310,6 +311,11 @@ def create_classqueuefilter(testbed_instance, guid): element = testbed_instance._make_class_queue_filter(parameters) testbed_instance.elements[guid] = element +def create_loggingclassqueuefilter(testbed_instance, guid): + parameters = testbed_instance._get_parameters(guid) + element = testbed_instance._make_logging_class_queue_filter(parameters) + testbed_instance.elements[guid] = element + def create_tosqueuefilter(testbed_instance, guid): parameters = testbed_instance._get_parameters(guid) element = testbed_instance._make_tos_queue_filter(parameters) @@ -1527,7 +1533,7 @@ factories_info = dict({ "connector_types": ["->fd","udp","tcp"], }), CLASSQUEUEFILTER : dict({ - "help": "TUN classfull queue, uses a separate queue for each user-definable class.\n\n" + "help": "TUN classful queue, uses a separate queue for each user-definable class.\n\n" "It takes two arguments, both of which have sensible defaults:\n" "\tsize: the base size of each class' queue\n" "\tclasses: the class definitions, which follow the following syntax:\n" @@ -1561,6 +1567,18 @@ factories_info = dict({ "connector_types": ["->fd","udp","tcp"], "traces": ["dropped_stats"], }), + LOGGINGCLASSQUEUEFILTER : dict({ + "help": "TUN classful queue, uses a separate queue for each user-definable class.\n" + "See ClassQueueFilter. This version adds detailled queue state tracing.", + "category": FC.CATEGORY_CHANNELS, + "create_function": create_loggingclassqueuefilter, + "box_attributes": [ + "args", + "tun_proto", "tun_addr", "tun_port", "tun_key", "tun_cipher", + ], + "connector_types": ["->fd","udp","tcp"], + "traces": ["dropped_stats","queue_stats"], + }), TOSQUEUEFILTER : dict({ "help": "TUN classfull queue that classifies according to the TOS (RFC 791) IP field.\n\n" "It takes a size argument that specifies the size of each class. As TOS is a " -- 2.47.0