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 |