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 44 users

Issue metadata

Status: Available
Owner: ----
Cc:
Components:
NextAction: ----
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

Issue description

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