Add support for setting the Differentiated Services or Type Of Service on 
outgoing TCP/IP packets to support Quality Of Service
-------------------------------------------------------------------------------------------------------------------------------

                 Key: AMQ-2636
                 URL: https://issues.apache.org/activemq/browse/AMQ-2636
             Project: ActiveMQ
          Issue Type: New Feature
          Components: Transport
    Affects Versions: 5.3.0
         Environment: Affects all OSes, proposed fix has only been tested on 
Ubuntu 9.10
            Reporter: Jessie Berlin
             Fix For: 5.3.0


It should be possible to specify the desired Differentiated Services class, as 
outlined in RFC 2475 (http://tools.ietf.org/html/rfc2475), or Type of Service 
value, on outgoing TCP/IP packets by specifying a diffServ or typeOfService Tcp 
Transport Option (http://activemq.apache.org/tcp-transport-reference.html).

e.g. tcp://somehost:61616?trace=false&soTimeout=60000&diffServ=AF21
e.g. tcp://somehost:61616?trace=false&soTimeout=60000&typeOfService=3

I am part of a student group 
(http://maljub01.svnrepository.com/comp190/trac.cgi/wiki) at Tufts University 
that is implementing this functionality in ActiveMQ for potential use by MIT 
Lincoln Labs as part of the NextGen Network Enabled Weather Program 
(https://wiki.ucar.edu/display/NNEWD/The+NNEW+Wiki)..

We would like to contribute our changes back to the ActiveMQ trunk, if 
possible. Attached is a initial patch against the 5.3.0 release version, which 
implements setting the Differentiated Services class via a Tcp Transport Option 
on the connection URI.

Some notes about this approach:

The basic underlying mechanism for actually setting the bits in the packet 
headers is the java.net.Socket.setTrafficClass method. This was
the most elegant implementation out of all the possible implementations that we 
came up with.

In order for setTrafficClass to work in JDK 6, it is necessary to set the 
System property java.net.preferIPv4Stack to be true. We found that this has 
precedent in ActiveMQ 
(http://activemq.apache.org/multicast-watch-out-for-ipv6-vs-ipv4-support-on-your-operating-system-or-distribution-or-network.html),
 but we are hoping that  this issue will be resolved in JDK 7, so that we can 
use the IPv6 stack when possible.

In addition, the current implementation only sets the specified Differentiated 
Services bits on the outgoing packets, and has no control over the 
Acknowledgments sent back for those packets. We have yet to find an elegant and 
cross-platform way to have the ActiveMQ Broker find out what the Differentiated 
Services bits on the incoming packets are directly in Java, although we are 
considering approaches that would involve calling a shell script from 
TcpTransportServer that would utilize IPtables.

We would like to know if might be interested in accepting this work into the 
ActiveMQ trunk. The sooner you let us know one way or another, the better, as 
this is a single-semester project.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to