Generating DSCP-marked packets on Windows 7 (or later) seems to be extremely difficult. From my understanding, two things need to happen:
1) The Generator needs to use Microsoft API. If not, the OS will override the DSCP.
See: https://social.technet.microsoft.com/Forums/en-US/175752f1-ce2a-478a-82f9-d4f81ad699bf/qos-tos-dscp-marking-removed-on-apps?forum=win10itpronetworking
Anyone know which generator uses Microsoft API? I've tried iPerf, iPer3, Tamosoft, Ostinato. Didn't seem to work.
Microsoft used to have a tool called qostraffic.exe. But it's not available for download anymore.
2) Windows needs to be tuned to allow application set DSCP marking.
Unfortunately, not many network engineers know Windows. Not many Windows engineers know network. Thus the instruction was very confusing. For example, in this link http://www.iperfwindows.com/IPERF-QoS-tests2.html. ; Two registry keys and two policy settings. But it doesn't make sense to me, because:
A) Policy-Based QoS was for Windows to mark DSCP based on predefined rules (such as source/destination IP, etc.). If our intent to was allow application set their own DSCP, why use policy-based QoS?
B) "DSCP Marking Override" tab is confusing. Per https://technet.microsoft.com/en-us/library/dd759108%28v=ws.11%29.aspx,
DSCP Marking Override
DSCP Marking Override blocks the ability of applications to specify, or mark, non-zero DSCP values. By default, applications and services can set non-zero DSCP values.
To override DSCP marking requests from applications and services, select the Control DSCP marking requests from applications check box, and then select Ignored. Applications and services that use QoS application programming interfaces (APIs) will have their DSCP values set to zero, and only QoS policies can set DSCP values.
If the default behavior is to allow applications set DSCP values, why bother making all these changes? Based on my best, "by default" didn't work for many packet generators (including iPerf).
If the purpose of the "DSCP Marking Override" checkbox is to override the DSCP, why have a radio button (option) to allow application set DSCP values?
If the override only affects "applications that use QoS API", does that mean applications NOT using the API will not be overridden?