[WireGuard] WireGuard ECN Implementation

Dave Taht dave.taht at gmail.com
Thu Sep 29 20:19:52 CEST 2016

On Thu, Sep 29, 2016 at 10:50 AM, Jason A. Donenfeld <Jason at zx2c4.com> wrote:
> Hey Dave,
> I'm back! Catching up on the backlog now. You wrote in your blog post:

Welcome back!

I got distracted also. See "TCP BBR".

I have no idea how sch_fq + pacing fits into your design, either.

>> In a day, the author (while on a plane!) tossed off an ecn encapsulation
>> implementation (it worked! but it’s not currently as modern RFC compliant as it should be),
> What part of it deviates from the RFC precisely? Here's a short
> summary of the implementation:
> - When a packet is transmitted:
>     outer_packet->ds =
>             ip_tunnel_ecn_encap(0, ip_hdr(inner_packet), inner_packet);
> - When a packet is received:
>     var = ip_tunnel_get_dsfield(ip_hdr(outer_packet), outer_packet);
>     if (INET_ECN_is_ce(var))
>         IP_ECN_set_ce(ip_hdr(inner_packet));

I think the correct behavior here is to only set ce on the inner
packet if the inner packet is marked as ecn capable.

> What specifically is wrong with this? Where does it deviate from the
> RFC? I'd like to be as "correct" as possible.

It looked to as tho leveraging the other newer ecn capable codebases
in the kernel was sane also.

> Talk soon,
> Jason

Dave Täht
Let's go make home routers and wifi faster! With better software!

More information about the WireGuard mailing list