[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <CANSNSoV1M9stB7CnUcEhsz3FHi4NV_yrBtpYsZ205+rqnvMbvA@mail.gmail.com>
Date: Wed, 9 Oct 2019 11:00:07 -0500
From: Jesse Hathaway <jesse@...ki-mvuki.org>
To: netdev@...r.kernel.org
Subject: Race condition in route lookup
We have been experiencing a route lookup race condition on our internet facing
Linux routers. I have been able to reproduce the issue, but would love more
help in isolating the cause.
Looking up a route found in the main table returns `*` rather than the directly
connected interface about once for every 10-20 million requests. From my
reading of the iproute2 source code an asterisk is indicative of the kernel
returning and interface index of 0 rather than the correct directly connected
interface.
This is reproducible with the following bash snippet on 5.4-rc2:
$ cat route-race
#!/bin/bash
# Generate 50 million individual route gets to feed as batch input to `ip`
function ip-cmds() {
route_get='route get 192.168.11.142 from 192.168.180.10 iif vlan180'
for ((i = 0; i < 50000000; i++)); do
printf '%s\n' "${route_get}"
done
}
ip-cmds | ip -d -o -batch - | grep -E 'dev \*' | uniq -c
Example output:
$ ./route-race
6 unicast 192.168.11.142 from 192.168.180.10 dev * table main
\ cache iif vlan180
These routers have multiple routing tables and are ingesting full BGP routing
tables from multiple ISPs:
$ ip route show table all | wc -l
3105543
$ ip route show table main | wc -l
54
Please let me know what other information I can provide, thanks in advance,
Jesse Hathaway
Powered by blists - more mailing lists