21.2.2 XCP Router

The XCP router consists of a wrapper class that holds virtual queues for XCP, TCP and OTHER traffic flows. OTHER flow maybe anything other than XCP and TCP. In the current implementation, the XCP queue is a drop-tail queue while those for TCP and OTHER use RED.

These underlying queues are bundled in a wrapper class XCPWrapQ that provides necessary interface to the XCP router. The XCP/TCP/OTHER queues are serviced in a Weighted Round-Robin manner. Each queue has a weight that determines the percentage of the service it receives. The current queue weights of 0.5 each for the XCP and TCP allows equal service between the two. The third queue reserved for OTHER flows has not been used as yet and has a weight of 0.0.

OTCL Class Queue/XCP has a flag named tcp_xcp_on_ which is set to a default value of 0. This should be set to 1 for those simulations that use both XCP and TCP flows. This flag is used to split the link capacity of the router between the XCP and TCP queues in simulations that use both flow types. This is supposed to be a temporary fix and should go away once the dynamic queue weights come into effect. A caveat for the tcp_xcp flag is that it is set as an OTcl class variable and not per instance variable. This might cause some problems in topologies that uses mix of intermittent xcp and tcp flows for which some router would require to support both TCP and XCP and some wouldn't.

Every packet received by the wrapper queue class is first marked or assigned a code point depending on the type of the packet. Packets, for the current TCP implementation, are marked for XCP, TCP/TCP-ACK and OTHER packets. This code point is used to enque packets in the right queue. The wrapper class is implemented in xcp.cc,h.

Tom Henderson 2011-11-05