Engage Network QoS - rallytac/pub GitHub Wiki

Engage and Network Quality Of Service

The concept of application quality of service VoIP covers a broad spectrum and can incorporate criteria such as network traffic prioritization, machine-level traffic prioritization, access control, user experience, responsiveness to outages, service-level agreements, and a variety of other areas. This article will only cover the first two mentioned - network traffic prioritization and machine-level traffic prioritization.

Most network folks have a pretty good grasp of prioritization of network traffic but, in case you'd like a refresher and dig a little deeper, take a look at the Wikpedia articles on QoS and DSCP.

Group-by-Group QoS

The first concept to understand is that Engage handles QoS settings on a group-by-group basis. For administrators and network designers, this means that you can fine-tune your Engage traffic - especially in those environments where throughput may be limited and you want to grant higher priority to certain groups/channels. For developers, its important for this purpose to ensure that your applications support group-by-group QoS settings.

QoS or, more specifically, "transmit priority" is configured in a group's "txOptions" JSON subobject. For example:

     {
       "type":1,
       "id":"...",
       "name":"Alpha",
       "cryptoPassword":"...",
       "blockAdvertising":false,
       "rx":{
         "address":"234.5.6.7",
         "port":1234
       },
       "tx":{
         "address":"234.5.6.7",
         "port":1234
       },
       "txOptions":{
          "priority":3,     // Priority value (voice in this case)

       //....        
       }

Transmit Priorities

Engage supports 4 transmit priorities which it maps to the QoS capabilities of the particular operating system platform and network transport.

Value Meaning
0 Best Effort
1 Signaling & Control Plane
2 Video
3 Voice (Default)

These values translate to different operation modes and packet marking on target platforms.

Linux & Android

Linux systems (including Android) generally provide the finest level of control over the resultant marking on outgoing packets, while in-machine prioritization varies based on the version of the Linux kernel and the capabilities and configuration of the IP stack.

Engage Priority DSCP Socket Prioritization
0 0 None
1 AF43 6
2 EF46 6
3 EF46 6

Mac OSX and iOS

On BSD-style OSX and iOS platforms, Engage requests a network service level of the operating based on the provided Engage priority. The operating system will decide, based on security provisions, what the resulting DSCP and service prioritization is. Generally, though, the table below holds true.

Engage Priority DSCP Network Service
0 0 NET_SERVICE_TYPE_BE
1 AF43 NET_SERVICE_TYPE_SIG
2 EF46 NET_SERVICE_TYPE_VI
3 EF46 NET_SERVICE_TYPE_VO

Windows

Under Microsoft Windows (from Windows 7 onward), Engage uses the Windows qWAVE interface to set outgoing traffic shaping. The high-level nature of qWAVE does not give Engage as much control over the final marking marking when the application is run with standard privilege. That is determined by the operating system. The resulting DSCP values are DS Class Selectors as determined by Windows rather than DSCP values.

Without admninistrative privileges

Engage Priority Class Selector QoS Profile
0 0 QOSTrafficTypeBestEffort
1 CS7 (DSCP 56) QOSTrafficTypeControl
2 CS7 (DSCP 56) QOSTrafficTypeVoice
3 CS7 (DSCP 56) QOSTrafficTypeVoice

However, if the application is run with administrative privileges, Windows does allow for manual setting of the DSCP value along with the in-machine traffic shaping profile.

With admninistrative privileges

Engage Priority DSCP QoS Profile
0 0 QOSTrafficTypeBestEffort
1 AF43 QOSTrafficTypeControl
2 EF46 QOSTrafficTypeVoice
3 EF46 QOSTrafficTypeVoice