[lkml]   [2019]   [Mar]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: [PATCH net] packets: Always register packet sk in the same order
On Sat, Mar 16, 2019 at 9:43 AM Maxime Chevallier
<> wrote:
> When using fanouts with AF_PACKET, the demux functions such as
> fanout_demux_cpu will return an index in the fanout socket array, which
> corresponds to the selected socket.
> The ordering of this array depends on the order the sockets were added
> to a given fanout group, so for FANOUT_CPU this means sockets are bound
> to cpus in the order they are configured, which is OK.
> However, when stopping then restarting the interface these sockets are
> bound to, the sockets are reassigned to the fanout group in the reverse
> order, due to the fact that they were inserted at the head of the
> interface's AF_PACKET socket list.
> This means that traffic that was directed to the first socket in the
> fanout group is now directed to the last one after an interface restart.
> In the case of FANOUT_CPU, traffic from CPU0 will be directed to the
> socket that used to receive traffic from the last CPU after an interface
> restart.
> This commit introduces a helper to add a socket at the tail of a list,
> then uses it to register AF_PACKET sockets.
> Note that this changes the order in which sockets are listed in /proc and
> with sock_diag.
> Fixes: dc99f600698d ("packet: Add fanout support")
> Signed-off-by: Maxime Chevallier <>

Acked-by: Willem de Bruijn <>

Note that another consequence of this patch is that insertion on
packet create is now O(N) with the number of active packet sockets,
due to sklist being an hlist.

 \ /
  Last update: 2019-03-16 19:10    [W:0.361 / U:11.856 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site