route.c (98817a84ff1c755c347ac633ff017a623a631fad) | route.c (34fe5a1cf95c3f114068fc16d919c9cf4b00e428) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * Linux INET6 implementation 4 * FIB front-end. 5 * 6 * Authors: 7 * Pedro Roque <roque@di.fc.ul.pt> 8 */ --- 417 unchanged lines hidden (view full) --- 426 427void fib6_select_path(const struct net *net, struct fib6_result *res, 428 struct flowi6 *fl6, int oif, bool have_oif_match, 429 const struct sk_buff *skb, int strict) 430{ 431 struct fib6_info *sibling, *next_sibling; 432 struct fib6_info *match = res->f6i; 433 | 1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * Linux INET6 implementation 4 * FIB front-end. 5 * 6 * Authors: 7 * Pedro Roque <roque@di.fc.ul.pt> 8 */ --- 417 unchanged lines hidden (view full) --- 426 427void fib6_select_path(const struct net *net, struct fib6_result *res, 428 struct flowi6 *fl6, int oif, bool have_oif_match, 429 const struct sk_buff *skb, int strict) 430{ 431 struct fib6_info *sibling, *next_sibling; 432 struct fib6_info *match = res->f6i; 433 |
434 if ((!match->fib6_nsiblings && !match->nh) || have_oif_match) | 434 if (!match->nh && (!match->fib6_nsiblings || have_oif_match)) |
435 goto out; 436 | 435 goto out; 436 |
437 if (match->nh && have_oif_match && res->nh) 438 return; 439 |
|
437 /* We might have already computed the hash for ICMPv6 errors. In such 438 * case it will always be non-zero. Otherwise now is the time to do it. 439 */ 440 if (!fl6->mp_hash && 441 (!match->nh || nexthop_is_multipath(match->nh))) 442 fl6->mp_hash = rt6_multipath_hash(net, fl6, skb, NULL); 443 444 if (unlikely(match->nh)) { --- 6120 unchanged lines hidden --- | 440 /* We might have already computed the hash for ICMPv6 errors. In such 441 * case it will always be non-zero. Otherwise now is the time to do it. 442 */ 443 if (!fl6->mp_hash && 444 (!match->nh || nexthop_is_multipath(match->nh))) 445 fl6->mp_hash = rt6_multipath_hash(net, fl6, skb, NULL); 446 447 if (unlikely(match->nh)) { --- 6120 unchanged lines hidden --- |