On 11/3/16 11:43 AM, David Ahern wrote: > ip_route_me_harder is not considering the L3 domain and sending lookups > to the wrong table. For example consider the following output rule: > > iptables -I OUTPUT -p tcp --dport 12345 -j REJECT --reject-with tcp-reset > > using perf to analyze lookups via the fib_table_lookup tracepoint shows: > > vrf-test 1187 [001] 46887.295927: fib:fib_table_lookup: table 255 oif 0 iif > 0 src 0.0.0.0 dst 10.100.1.254 tos 0 scope 0 flags 0 > ffffffff8143922c perf_trace_fib_table_lookup ([kernel.kallsyms]) > ffffffff81493aac fib_table_lookup ([kernel.kallsyms]) > ffffffff8148dda3 __inet_dev_addr_type ([kernel.kallsyms]) > ffffffff8148ddf6 inet_addr_type ([kernel.kallsyms]) > ffffffff8149e344 ip_route_me_harder ([kernel.kallsyms]) > > and > > vrf-test 1187 [001] 46887.295933: fib:fib_table_lookup: table 255 oif 0 iif > 1 src 10.100.1.254 dst 10.100.1.2 tos 0 scope 0 flags > ffffffff8143922c perf_trace_fib_table_lookup ([kernel.kallsyms]) > ffffffff81493aac fib_table_lookup ([kernel.kallsyms]) > ffffffff814998ff fib4_rule_action ([kernel.kallsyms]) > ffffffff81437f35 fib_rules_lookup ([kernel.kallsyms]) > ffffffff81499758 __fib_lookup ([kernel.kallsyms]) > ffffffff8144f010 fib_lookup.constprop.34 ([kernel.kallsyms]) > ffffffff8144f759 __ip_route_output_key_hash ([kernel.kallsyms]) > ffffffff8144fc6a ip_route_output_flow ([kernel.kallsyms]) > ffffffff8149e39b ip_route_me_harder ([kernel.kallsyms]) > > Updating both lookups to pull the L3 domain from the dst currently > attached to the skb directs both lookups to the correct table. > > Signed-off-by: David Ahern <d...@cumulusnetworks.com> > --- > Pablo: from a code review it seems ip_route_me_harder is only called in > the output path and after skb_dst is set.
Correction: the 'output path' comment is wrong, but dst appears to always be set for both rx and tx paths.