From: Shaohua Li <s...@kernel.org> Date: Wed, 20 Dec 2017 12:10:21 -0800
> From: Shaohua Li <s...@fb.com> > > sysctl.ip6.auto_flowlabels is default 1. In our hosts, we set it to 2. > If sockopt doesn't set autoflowlabel, outcome packets from the hosts are > supposed to not include flowlabel. This is true for normal packet, but > not for reset packet. > > The reason is ipv6_pinfo.autoflowlabel is set in sock creation. Later if > we change sysctl.ip6.auto_flowlabels, the ipv6_pinfo.autoflowlabel isn't > changed, so the sock will keep the old behavior in terms of auto > flowlabel. Reset packet is suffering from this problem, because reset > packet is sent from a special control socket, which is created at boot > time. Since sysctl.ipv6.auto_flowlabels is 1 by default, the control > socket will always have its ipv6_pinfo.autoflowlabel set, even after > user set sysctl.ipv6.auto_flowlabels to 1, so reset packset will always > have flowlabel. Normal sock created before sysctl setting suffers from > the same issue. We can't even turn off autoflowlabel unless we kill all > socks in the hosts. > > To fix this, if IPV6_AUTOFLOWLABEL sockopt is used, we use the > autoflowlabel setting from user, otherwise we always call > ip6_default_np_autolabel() which has the new settings of sysctl. > > Note, this changes behavior a little bit. Before commit 42240901f7c4 > (ipv6: Implement different admin modes for automatic flow labels), the > autoflowlabel behavior of a sock isn't sticky, eg, if sysctl changes, > existing connection will change autoflowlabel behavior. After that > commit, autoflowlabel behavior is sticky in the whole life of the sock. > With this patch, the behavior isn't sticky again. > > Cc: Martin KaFai Lau <ka...@fb.com> > Cc: Eric Dumazet <eric.duma...@gmail.com> > Cc: Tom Herbert <t...@quantonium.net> > Signed-off-by: Shaohua Li <s...@fb.com> This looks a lot better, applied, thanks.