LoggingClassQueueFilter metadata
authorClaudio-Daniel Freire <claudio-daniel.freire@inria.fr>
Wed, 30 May 2012 00:59:05 +0000 (21:59 -0300)
committerClaudio-Daniel Freire <claudio-daniel.freire@inria.fr>
Wed, 30 May 2012 00:59:05 +0000 (21:59 -0300)
src/nepi/testbeds/planetlab/execute.py
src/nepi/testbeds/planetlab/interfaces.py
src/nepi/testbeds/planetlab/metadata.py

index 467d9fe..c04bba5 100644 (file)
@@ -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)
 
index 60295e2..789d8ea 100644 (file)
@@ -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)
index 5e07320..f657d44 100644 (file)
@@ -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 "