ActiveMQ
  1. ActiveMQ
  2. AMQ-2636

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

    Details

    • Type: New Feature New Feature
    • Status: Resolved
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: 5.3.0
    • Fix Version/s: 5.4.0
    • Component/s: Transport
    • Labels:
      None
    • Environment:

      Affects all OSes, proposed fix has only been tested on Ubuntu 9.10

    • Patch Info:
      Patch Available

      Description

      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.

      1. addDiffServToTcpTransport.patch
        16 kB
        Jessie Berlin
      2. addToSSupportAndRefactoring.patch
        28 kB
        Jessie Berlin
      3. ASF.LICENSE.NOT.GRANTED--fixECNBitsAndAddCSDiffServNames.patch
        7 kB
        Jessie Berlin
      4. brokerConfig.tar.gz
        4 kB
        Jessie Berlin
      5. fixECNBits.patch
        5 kB
        Jessie Berlin

        Activity

        Jeff Turner made changes -
        Project Import Fri Nov 26 22:32:02 EST 2010 [ 1290828722158 ]
        Rob Davies made changes -
        Resolution Fixed [ 1 ]
        Status Reopened [ 4 ] Resolved [ 5 ]
        Jessie Berlin made changes -
        Attachment brokerConfig.tar.gz [ 19251 ]
        Jessie Berlin made changes -
        Jessie Berlin made changes -
        Resolution Fixed [ 1 ]
        Status Resolved [ 5 ] Reopened [ 4 ]
        Jessie Berlin made changes -
        Attachment fixECNBits.patch [ 19131 ]
        Rob Davies made changes -
        Status Reopened [ 4 ] Resolved [ 5 ]
        Resolution Fixed [ 1 ]
        Jessie Berlin made changes -
        Attachment addToSSupportAndRefactoring.patch [ 19033 ]
        Jessie Berlin made changes -
        Status Resolved [ 5 ] Reopened [ 4 ]
        Resolution Fixed [ 1 ]
        Rob Davies made changes -
        Resolution Fixed [ 1 ]
        Fix Version/s 5.4.0 [ 12110 ]
        Fix Version/s 5.3.0 [ 11914 ]
        Status Open [ 1 ] Resolved [ 5 ]
        Rob Davies made changes -
        Assignee Rob Davies [ rajdavies ]
        Jessie Berlin made changes -
        Priority Major [ 3 ] Minor [ 4 ]
        Jessie Berlin made changes -
        Field Original Value New Value
        Attachment addDiffServToTcpTransport.patch [ 19006 ]
        Jessie Berlin created issue -

          People

          • Assignee:
            Rob Davies
            Reporter:
            Jessie Berlin
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development