I knew I'd seen FreshJR talk about DSCP earlier in the thread but couldn't find it - was searching for DSCP and iptables. When I just searched for DSCP I found
this post with an DSCP matching example using tc.
Plugging in the hex values for the DSCP values for Zoom and WebEx, I get
# solstyce Zoom to VOIP DSCP 40 (video) and 56 (audio) -- down
${tc} filter add dev br0 protocol all prio 1 u32 match u8 0x28 0xFC at 8 flowid ${VOIP}
${tc} filter add dev br0 protocol all prio 1 u32 match u8 0x38 0xFC at 8 flowid ${VOIP}
# solstyce Webex to VOIP DSCP 34 (video) and 46 (audio) -- down
${tc} filter add dev br0 protocol all prio 1 u32 match u8 0x22 0xFC at 8 flowid ${VOIP}
${tc} filter add dev br0 protocol all prio 1 u32 match u8 0x2e 0xFC at 8 flowid ${VOIP}
# solstyce Zoom to VOIP DSCP 40 (video) and 56 (audio) -- up
${tc} filter add dev eth0 protocol all prio 1 u32 match u8 0x28 0xFC at 8 flowid ${VOIP}
${tc} filter add dev eth0 protocol all prio 1 u32 match u8 0x38 0xFC at 8 flowid ${VOIP}
# solstyce Webex to VOIP DSCP 34 (video) and 46 (audio) -- up
${tc} filter add dev eth0 protocol all prio 1 u32 match u8 0x22 0xFC at 8 flowid ${VOIP}
${tc} filter add dev eth0 protocol all prio 1 u32 match u8 0x2e 0xFC at 8 flowid ${VOIP}
But when I add them to the bottom of the other TC down and TC up functions in the script, it's allocating the majority of the downward traffic into VOIP even without Zoom or WebEx running. Then when I fire up Zoom, I don't see any additional VOIP traffic in my upload stats. This is looking at the pie charts since these rules don't appear in the web UI, and I'm assuming they won't appear in the per-system connection view at the bottom of the QoS-Classification page.
I did some research on tc and tc-u32 man pages and roughly understand what these commands are doing but it appears I'm catching unexpected traffic with these rules. I did a few wireshark captures to check for DSCP values and didn't see much. What was tagged was mainly "CS0" and "27". Apparently wireshark shows the decimal value for the full 8 bits, so you have to convert to binary, then convert the first 6 bits back to decimal to see the actual decimal DSCP value.
Wondering if I borked the math somewhere, or if I'm missing something obvious with tc.
So close I can almost taste it!