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 ---