Lines Matching refs:fl6
414 struct flowi6 *fl6, int oif, bool have_oif_match, in fib6_select_path() argument
429 if (!fl6->mp_hash && in fib6_select_path()
431 fl6->mp_hash = rt6_multipath_hash(net, fl6, skb, NULL); in fib6_select_path()
434 nexthop_path_fib6_result(res, fl6->mp_hash); in fib6_select_path()
438 if (fl6->mp_hash <= atomic_read(&match->fib6_nh->fib_nh_upper_bound)) in fib6_select_path()
447 if (fl6->mp_hash > nh_upper_bound) in fib6_select_path()
1201 struct flowi6 *fl6, in ip6_pol_route_lookup() argument
1209 if (fl6->flowi6_flags & FLOWI_FLAG_SKIP_NH_OIF) in ip6_pol_route_lookup()
1213 fn = fib6_node_lookup(&table->tb6_root, &fl6->daddr, &fl6->saddr); in ip6_pol_route_lookup()
1219 rt6_device_match(net, &res, &fl6->saddr, fl6->flowi6_oif, in ip6_pol_route_lookup()
1223 fn = fib6_backtrack(fn, &fl6->saddr); in ip6_pol_route_lookup()
1234 fib6_select_path(net, &res, fl6, fl6->flowi6_oif, in ip6_pol_route_lookup()
1235 fl6->flowi6_oif != 0, skb, flags); in ip6_pol_route_lookup()
1238 rt = rt6_find_cached_rt(&res, &fl6->daddr, &fl6->saddr); in ip6_pol_route_lookup()
1248 trace_fib6_table_lookup(net, &res, table, fl6); in ip6_pol_route_lookup()
1255 struct dst_entry *ip6_route_lookup(struct net *net, struct flowi6 *fl6, in ip6_route_lookup() argument
1258 return fib6_rule_lookup(net, fl6, skb, flags, ip6_pol_route_lookup); in ip6_route_lookup()
1266 struct flowi6 fl6 = { in rt6_lookup() local
1274 memcpy(&fl6.saddr, saddr, sizeof(*saddr)); in rt6_lookup()
1278 dst = fib6_rule_lookup(net, &fl6, skb, flags, ip6_pol_route_lookup); in rt6_lookup()
2174 struct flowi6 *fl6, struct fib6_result *res, int strict) in fib6_table_lookup() argument
2178 fn = fib6_node_lookup(&table->tb6_root, &fl6->daddr, &fl6->saddr); in fib6_table_lookup()
2181 if (fl6->flowi6_flags & FLOWI_FLAG_SKIP_NH_OIF) in fib6_table_lookup()
2187 fn = fib6_backtrack(fn, &fl6->saddr); in fib6_table_lookup()
2198 trace_fib6_table_lookup(net, res, table, fl6); in fib6_table_lookup()
2204 int oif, struct flowi6 *fl6, in ip6_pol_route() argument
2221 fib6_table_lookup(net, table, oif, fl6, &res, strict); in ip6_pol_route()
2225 fib6_select_path(net, &res, fl6, oif, false, skb, strict); in ip6_pol_route()
2228 rt = rt6_find_cached_rt(&res, &fl6->daddr, &fl6->saddr); in ip6_pol_route()
2231 } else if (unlikely((fl6->flowi6_flags & FLOWI_FLAG_KNOWN_NH) && in ip6_pol_route()
2238 rt = ip6_rt_cache_alloc(&res, &fl6->daddr, NULL); in ip6_pol_route()
2275 struct flowi6 *fl6, in ip6_pol_route_input() argument
2279 return ip6_pol_route(net, table, fl6->flowi6_iif, fl6, skb, flags); in ip6_pol_route_input()
2284 struct flowi6 *fl6, in ip6_route_input_lookup() argument
2288 if (rt6_need_strict(&fl6->daddr) && dev->type != ARPHRD_PIMREG) in ip6_route_input_lookup()
2291 return fib6_rule_lookup(net, fl6, skb, flags, ip6_pol_route_input); in ip6_route_input_lookup()
2433 const struct flowi6 *fl6) in rt6_multipath_custom_hash_fl6() argument
2444 hash_keys.addrs.v6addrs.src = fl6->saddr; in rt6_multipath_custom_hash_fl6()
2446 hash_keys.addrs.v6addrs.dst = fl6->daddr; in rt6_multipath_custom_hash_fl6()
2448 hash_keys.basic.ip_proto = fl6->flowi6_proto; in rt6_multipath_custom_hash_fl6()
2450 hash_keys.tags.flow_label = (__force u32)flowi6_get_flowlabel(fl6); in rt6_multipath_custom_hash_fl6()
2452 hash_keys.ports.src = fl6->fl6_sport; in rt6_multipath_custom_hash_fl6()
2454 hash_keys.ports.dst = fl6->fl6_dport; in rt6_multipath_custom_hash_fl6()
2460 u32 rt6_multipath_hash(const struct net *net, const struct flowi6 *fl6, in rt6_multipath_hash() argument
2473 hash_keys.addrs.v6addrs.src = fl6->saddr; in rt6_multipath_hash()
2474 hash_keys.addrs.v6addrs.dst = fl6->daddr; in rt6_multipath_hash()
2475 hash_keys.tags.flow_label = (__force u32)flowi6_get_flowlabel(fl6); in rt6_multipath_hash()
2476 hash_keys.basic.ip_proto = fl6->flowi6_proto; in rt6_multipath_hash()
2504 hash_keys.addrs.v6addrs.src = fl6->saddr; in rt6_multipath_hash()
2505 hash_keys.addrs.v6addrs.dst = fl6->daddr; in rt6_multipath_hash()
2506 hash_keys.ports.src = fl6->fl6_sport; in rt6_multipath_hash()
2507 hash_keys.ports.dst = fl6->fl6_dport; in rt6_multipath_hash()
2508 hash_keys.basic.ip_proto = fl6->flowi6_proto; in rt6_multipath_hash()
2542 hash_keys.addrs.v6addrs.src = fl6->saddr; in rt6_multipath_hash()
2543 hash_keys.addrs.v6addrs.dst = fl6->daddr; in rt6_multipath_hash()
2544 hash_keys.tags.flow_label = (__force u32)flowi6_get_flowlabel(fl6); in rt6_multipath_hash()
2545 hash_keys.basic.ip_proto = fl6->flowi6_proto; in rt6_multipath_hash()
2553 mhash = rt6_multipath_custom_hash_fl6(net, fl6); in rt6_multipath_hash()
2567 struct flowi6 fl6 = { in ip6_route_input() local
2579 fl6.flowi6_tun_key.tun_id = tun_info->key.tun_id; in ip6_route_input()
2581 if (fib6_rules_early_flow_dissect(net, skb, &fl6, &_flkeys)) in ip6_route_input()
2584 if (unlikely(fl6.flowi6_proto == IPPROTO_ICMPV6)) in ip6_route_input()
2585 fl6.mp_hash = rt6_multipath_hash(net, &fl6, skb, flkeys); in ip6_route_input()
2588 &fl6, skb, flags)); in ip6_route_input()
2593 struct flowi6 *fl6, in ip6_pol_route_output() argument
2597 return ip6_pol_route(net, table, fl6->flowi6_oif, fl6, skb, flags); in ip6_pol_route_output()
2602 struct flowi6 *fl6, int flags) in ip6_route_output_flags_noref() argument
2606 if (ipv6_addr_type(&fl6->daddr) & in ip6_route_output_flags_noref()
2611 dst = l3mdev_link_scope_lookup(net, fl6); in ip6_route_output_flags_noref()
2616 fl6->flowi6_iif = LOOPBACK_IFINDEX; in ip6_route_output_flags_noref()
2619 any_src = ipv6_addr_any(&fl6->saddr); in ip6_route_output_flags_noref()
2620 if ((sk && sk->sk_bound_dev_if) || rt6_need_strict(&fl6->daddr) || in ip6_route_output_flags_noref()
2621 (fl6->flowi6_oif && any_src)) in ip6_route_output_flags_noref()
2629 return fib6_rule_lookup(net, fl6, NULL, flags, ip6_pol_route_output); in ip6_route_output_flags_noref()
2635 struct flowi6 *fl6, in ip6_route_output_flags() argument
2642 dst = ip6_route_output_flags_noref(net, sk, fl6, flags); in ip6_route_output_flags()
2935 struct flowi6 fl6 = { in ip6_update_pmtu() local
2944 dst = ip6_route_output(net, NULL, &fl6); in ip6_update_pmtu()
2974 const struct flowi6 *fl6) in ip6_sk_dst_store_flow() argument
2981 ipv6_addr_equal(&fl6->daddr, &sk->sk_v6_daddr) ? in ip6_sk_dst_store_flow()
2984 ipv6_addr_equal(&fl6->saddr, &np->saddr) ? in ip6_sk_dst_store_flow()
2991 struct flowi6 *fl6, in ip6_redirect_nh_match() argument
2998 fl6->flowi6_oif != nh->fib_nh_dev->ifindex) in ip6_redirect_nh_match()
3009 rt_cache = rt6_find_cached_rt(res, &fl6->daddr, &fl6->saddr); in ip6_redirect_nh_match()
3022 struct flowi6 *fl6; member
3032 return ip6_redirect_nh_match(arg->res, arg->fl6, arg->gw, arg->ret); in fib6_nh_redirect_match()
3037 struct flowi6 fl6; member
3043 struct flowi6 *fl6, in __ip6_route_redirect() argument
3047 struct ip6rd_flowi *rdfl = (struct ip6rd_flowi *)fl6; in __ip6_route_redirect()
3052 .fl6 = fl6, in __ip6_route_redirect()
3062 if (fl6->flowi6_flags & FLOWI_FLAG_SKIP_NH_OIF) in __ip6_route_redirect()
3063 fl6->flowi6_oif = skb->dev->ifindex; in __ip6_route_redirect()
3076 fn = fib6_node_lookup(&table->tb6_root, &fl6->daddr, &fl6->saddr); in __ip6_route_redirect()
3094 if (ip6_redirect_nh_match(&res, fl6, &rdfl->gateway, in __ip6_route_redirect()
3108 fn = fib6_backtrack(fn, &fl6->saddr); in __ip6_route_redirect()
3126 trace_fib6_table_lookup(net, &res, table, fl6); in __ip6_route_redirect()
3131 const struct flowi6 *fl6, in ip6_route_redirect() argument
3138 rdfl.fl6 = *fl6; in ip6_route_redirect()
3141 return fib6_rule_lookup(net, &rdfl.fl6, skb, in ip6_route_redirect()
3150 struct flowi6 fl6 = { in ip6_redirect() local
3160 dst = ip6_route_redirect(net, &fl6, skb, &ipv6_hdr(skb)->saddr); in ip6_redirect()
3171 struct flowi6 fl6 = { in ip6_redirect_no_header() local
3179 dst = ip6_route_redirect(net, &fl6, skb, &iph->saddr); in ip6_redirect_no_header()
3261 struct flowi6 *fl6) in icmp6_dst_alloc() argument
3280 rt->rt6i_gateway = fl6->daddr; in icmp6_dst_alloc()
3281 rt->rt6i_dst.addr = fl6->daddr; in icmp6_dst_alloc()
3292 dst = xfrm_lookup(net, &rt->dst, flowi6_to_flowi(fl6), NULL, 0); in icmp6_dst_alloc()
3331 struct flowi6 fl6 = { in ip6_nh_lookup_table() local
3348 err = fib6_table_lookup(net, table, cfg->fc_ifindex, &fl6, res, flags); in ip6_nh_lookup_table()
3350 fib6_select_path(net, res, &fl6, cfg->fc_ifindex, in ip6_nh_lookup_table()
3403 struct flowi6 fl6 = { in ip6_route_check_nh() local
3408 err = fib6_lookup(net, cfg->fc_ifindex, &fl6, &res, flags); in ip6_route_check_nh()
3416 fib6_select_path(net, &res, &fl6, cfg->fc_ifindex, in ip6_route_check_nh()
6021 struct flowi6 fl6 = {}; in inet6_rtm_getroute() local
6030 fl6.flowlabel = ip6_make_flowinfo(rtm->rtm_tos, 0); in inet6_rtm_getroute()
6037 fl6.saddr = *(struct in6_addr *)nla_data(tb[RTA_SRC]); in inet6_rtm_getroute()
6044 fl6.daddr = *(struct in6_addr *)nla_data(tb[RTA_DST]); in inet6_rtm_getroute()
6054 fl6.flowi6_mark = nla_get_u32(tb[RTA_MARK]); in inet6_rtm_getroute()
6057 fl6.flowi6_uid = make_kuid(current_user_ns(), in inet6_rtm_getroute()
6060 fl6.flowi6_uid = iif ? INVALID_UID : current_uid(); in inet6_rtm_getroute()
6063 fl6.fl6_sport = nla_get_be16(tb[RTA_SPORT]); in inet6_rtm_getroute()
6066 fl6.fl6_dport = nla_get_be16(tb[RTA_DPORT]); in inet6_rtm_getroute()
6070 &fl6.flowi6_proto, AF_INET6, in inet6_rtm_getroute()
6089 fl6.flowi6_iif = iif; in inet6_rtm_getroute()
6091 if (!ipv6_addr_any(&fl6.saddr)) in inet6_rtm_getroute()
6094 dst = ip6_route_input_lookup(net, dev, &fl6, NULL, flags); in inet6_rtm_getroute()
6098 fl6.flowi6_oif = oif; in inet6_rtm_getroute()
6100 dst = ip6_route_output(net, NULL, &fl6); in inet6_rtm_getroute()
6135 err = rt6_fill_node(net, skb, from, dst, &fl6.daddr, in inet6_rtm_getroute()
6136 &fl6.saddr, iif, RTM_NEWROUTE, in inet6_rtm_getroute()