Project: webrtc Issues People Development process History Sign in
New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.
Starred by 41 users
Status: Available
Owner: ----
Cc:
Components:
OS: Android
Pri: 2
Type: Bug



Sign in to add a comment
Missing DSCP support on POSIX platforms
Reported by budn...@gmail.com, Mar 15 2016 Back to list
What steps will reproduce the problem?
1. Set "googDSCP: true" constraint in peer connection settings
2. Make audio/video call
3. Check the DiffServ field value of outgoing IP packets 

What is the expected result?
DiffServ field should have following value: 
100010 00 
(DSCP part of field should be equal to 100010 (34 dec, AF41)),
for packets with video data, and
101110 00 
(DSCP part of field should be equal to 101110 (34 dec, EF)),
for packets with audio data as per
https://tools.ietf.org/html/draft-ietf-tsvwg-rtcweb-qos-12

What do you see instead?
DiffServ field has 000000 00 value for both audio and video packets.

What version of the product are you using? On what operating system?
Android platform. 

Please provide any additional information below.
Here is closely related issue for iOS platform:
https://bugs.chromium.org/p/webrtc/issues/detail?id=4951&q=dscp&colspec=ID%20Pri%20Mstone%20ReleaseBlock%20Component%20Status%20Owner%20Summary


 
no_dscp.png
190 KB View Download
Comment 1 by budn...@gmail.com, Mar 15 2016
I experience this issue on relatively old version of WebRTC, but it seems that DSCP support is omitted on upstream version too:
webrtc/base/physicalsocketserver.cc:
int PhysicalSocket::TranslateOption(Option opt, int* slevel, int* sopt) {
...
case OPT_DSCP:
  LOG(LS_WARNING) << "Socket::OPT_DSCP not supported.";
  return -1;
...
}

My proposal is to add support for this option for Android platform, as was shown there in https://bugs.chromium.org/p/webrtc/issues/detail?id=4951:
int PhysicalSocket::TranslateOption(Option opt, int* slevel, int* sopt) {
...
case OPT_DSCP:
  *slevel = IPPROTO_IP;
  *sopt = IP_TOS;
  break;
...
}

After this "fix" I've found, that WebRTC sets DSCP field value incorrectly:
it assigns DSCP value to DiffServ field directly (see attachment). 
naive_dscp.png
183 KB View Download
Comment 2 by budn...@gmail.com, Mar 15 2016
So, instead of direct assigning DSCP value to DiffServ field, we should shift it first: DSCP <<= 2; 

I think that we can ignore ECN part of DiffServ field for now, because its support is not implemented yet.
fix_dscp.png
189 KB View Download
Comment 3 by budn...@gmail.com, Mar 16 2016
Here is related patch: https://codereview.webrtc.org/1804993002/
Project Member Comment 4 by braveyao@webrtc.org, Mar 16 2016
Cc: honghaiz@webrtc.org
Owner: braveyao@webrtc.org
honghaiz@, is the cl good to land now?
Project Member Comment 5 by honghaiz@webrtc.org, Mar 16 2016
Yes, although you may need an owner approval (unless you are an owner yourself).
Comment 6 by budn...@gmail.com, Mar 18 2016
Guys, please proceed with testing and commiting of this patchset, because I don't have enough privileges on your servers :)
Project Member Comment 7 by braveyao@webrtc.org, May 18 2016
Cc: braveyao@webrtc.org
Owner: pthatcher@webrtc.org
How's going here?
Comment 8 by budn...@gmail.com, May 19 2016
As I understood, proposed change potentially could break Chrome's DSCP support.
Could you please describe, how can I check it? 
Project Member Comment 9 by anatolid@webrtc.org, Oct 31 2016
Components: PeerConnection
Labels: OS-Android
Project Member Comment 10 by deadbeef@webrtc.org, Nov 10 2016
Labels: EngTriaged
Status: Available
Summary: Missing DSCP support on POSIX platforms (was: Missing DSCP support on Android)
We can take over the CL (comment #3) when we come back to fixing DSCP. It only needs small changes.
Project Member Comment 11 by deadbeef@webrtc.org, Nov 12 2016
Cc: pthatcher@webrtc.org tkchin@webrtc.org
 Issue 4951  has been merged into this issue.
Project Member Comment 12 by anatolid@webrtc.org, Dec 14 2016
Owner: ----
Sign in to add a comment