# 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)
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"
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)
"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"
"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 "