This is automatically generated documentation. Edit after the "COMMENTS" heading; changes to the main body will be lost.
MultiQ -- Click element; calculates capacity information using EMG
MultiQ([keywords TCPCOLLECTOR, RAW_TIMESTAMP, MIN_SCALE])
Ports: at most 1 input, the same number of outputs
Calculates capacity information using equally-spaced mode gaps. MultiQ works in two ways. First, it calculates interarrival times of any packets fed to its input; capacity information about these packets is available via the "capacities" handler. Second, if you supply the name of a TCPCollector element via the TCPCOLLECTOR keyword, MultiQ will write capacity information for each significant TCP flow into the TCPCollector's output XML file. (A flow is significant if it had a 1500-byte MTU, it contained at least 50 data packets, and its rate was greater than 9.5 packets per second.) MultiQ has either zero or one inputs, and the same number of outputs. Keywords are:
This configuration reads a tcpdump(1) file on the standard input, calculates capacities for every TCP flow it contains, and writes an XML file to tcpinfo.xml containing MultiQ capacity information for every significant flow in the trace.
require(models); d :: FromDump(-, STOP true, FORCE_IP true) -> IPClassifier(tcp) -> a :: AggregateIPFlows -> tcpc :: TCPCollector(tcpinfo.xml, SOURCE d, NOTIFIER a) -> Discard; MultiQ(TCPCOLLECTOR tcpc);
After running Click on this configuration, tcpinfo.xml might look like this:
<?xml version='1.0' standalone='yes'?> <trace file='<stdin>'> <flow aggregate='1' src='18.104.22.168' sport='33397' dst='22.214.171.124' dport='80' begin='1028667433.955909' duration='131.647561' filepos='24'> <stream dir='0' ndata='3' nack='1508' beginseq='1543502210' seqlen='748' mtu='430' sentsackok='yes'> <multiq_capacity type='ack' scale='25.3' time='1313.299' bandwidth='9.454' commonbandwidth='10.000' commontype='10bT' bandwidth52='0.317' commonbandwidth52='0.317' commontype52='?' /> <multiq_capacity type='ack' scale='10.0' time='23.031' bandwidth='539.103' commonbandwidth='622.080' commontype='OC12' bandwidth52='18.063' commonbandwidth52='18.063' commontype52='?' /> </stream> <stream dir='1' ndata='2487' nack='0' beginseq='2831743689' seqlen='3548305' mtu='1500'> <multiq_capacity type='data' scale='760.2' time='1286.668' bandwidth='9.326' commonbandwidth='10.000' commontype='10bT' bandwidth52='0.323' commonbandwidth52='0.323' commontype52='?' /> <multiq_capacity type='data' scale='74.0' time='691.101' bandwidth='17.364' commonbandwidth='17.364' commontype='?' bandwidth52='0.602' commonbandwidth52='0.602' commontype52='?' /> </stream> </flow> <flow aggregate='2' src='126.96.36.199' sport='23568' dst='188.8.131.52' dport='80' begin='1028686953.640701' duration='45.544054' filepos='346485'> <stream dir='0' ndata='3' nack='63' beginseq='3453338283' seqlen='486' mtu='524' sentsackok='yes'> </stream> <stream dir='1' ndata='110' nack='1' beginseq='3034663568' seqlen='159102' mtu='1500'> </stream> </flow> </trace>
The second flow has no
<multiq_capacity> annotations because it was
The following configuration assumes that the input tcpdump(1) file contains
information about one direction of a significant flow. The MultiQ element
reads interarrival times from passing packets.
require(models); FromDump(-, FORCE_IP true, STOP true) -> m::MultiQ -> Discard; DriverManager(wait_stop, save m.capacities -);
This configuration wil print capacity information to standard output, in the following format:
w NTT (us) 1500-BW 40-BW (1500-BW) (40-BW) 163.2 955.744 12.556 0.435 12.556 0.435 13.3 148.382 80.872 2.804 100.000 2.804
If your dump file has more than one flow in it, use IPFilter, AggregateIPFlows, AggregateFilter, and/or CheckPaint to select one flow from the background. Finally, you can use MultiQ and FromIPSummaryDump to figure out capacity information from flat files of interarrival times. Create a file of interarrival times, where there's one interarrival time, measured in microseconds, per line. For example:
209878 38718 492618 73
Then feed that file into this configuration.
require(models); FromIPSummaryDump(-, CONTENTS usec1, STOP true) -> m::MultiQ(RAW_TIMESTAMP true) -> Discard; DriverManager(wait_stop, save m.capacities -);
The output format is the same as above.
Generated by 'click-elem2man' from 'package/multiq.hh:11' on 17/Jan/2012.