Lines Matching refs:fl6

412 		      struct flowi6 *fl6, int oif, bool have_oif_match,  in fib6_select_path()  argument
427 if (!fl6->mp_hash && in fib6_select_path()
429 fl6->mp_hash = rt6_multipath_hash(net, fl6, skb, NULL); in fib6_select_path()
432 nexthop_path_fib6_result(res, fl6->mp_hash); in fib6_select_path()
436 if (fl6->mp_hash <= atomic_read(&match->fib6_nh->fib_nh_upper_bound)) in fib6_select_path()
445 if (fl6->mp_hash > nh_upper_bound) in fib6_select_path()
1199 struct flowi6 *fl6, in ip6_pol_route_lookup() argument
1207 if (fl6->flowi6_flags & FLOWI_FLAG_SKIP_NH_OIF) in ip6_pol_route_lookup()
1211 fn = fib6_node_lookup(&table->tb6_root, &fl6->daddr, &fl6->saddr); in ip6_pol_route_lookup()
1217 rt6_device_match(net, &res, &fl6->saddr, fl6->flowi6_oif, in ip6_pol_route_lookup()
1221 fn = fib6_backtrack(fn, &fl6->saddr); in ip6_pol_route_lookup()
1232 fib6_select_path(net, &res, fl6, fl6->flowi6_oif, in ip6_pol_route_lookup()
1233 fl6->flowi6_oif != 0, skb, flags); in ip6_pol_route_lookup()
1236 rt = rt6_find_cached_rt(&res, &fl6->daddr, &fl6->saddr); in ip6_pol_route_lookup()
1246 trace_fib6_table_lookup(net, &res, table, fl6); in ip6_pol_route_lookup()
1253 struct dst_entry *ip6_route_lookup(struct net *net, struct flowi6 *fl6, in ip6_route_lookup() argument
1256 return fib6_rule_lookup(net, fl6, skb, flags, ip6_pol_route_lookup); in ip6_route_lookup()
1264 struct flowi6 fl6 = { in rt6_lookup() local
1272 memcpy(&fl6.saddr, saddr, sizeof(*saddr)); in rt6_lookup()
1276 dst = fib6_rule_lookup(net, &fl6, skb, flags, ip6_pol_route_lookup); in rt6_lookup()
2175 struct flowi6 *fl6, struct fib6_result *res, int strict) in fib6_table_lookup() argument
2179 fn = fib6_node_lookup(&table->tb6_root, &fl6->daddr, &fl6->saddr); in fib6_table_lookup()
2182 if (fl6->flowi6_flags & FLOWI_FLAG_SKIP_NH_OIF) in fib6_table_lookup()
2188 fn = fib6_backtrack(fn, &fl6->saddr); in fib6_table_lookup()
2199 trace_fib6_table_lookup(net, res, table, fl6); in fib6_table_lookup()
2205 int oif, struct flowi6 *fl6, in ip6_pol_route() argument
2222 fib6_table_lookup(net, table, oif, fl6, &res, strict); in ip6_pol_route()
2226 fib6_select_path(net, &res, fl6, oif, false, skb, strict); in ip6_pol_route()
2229 rt = rt6_find_cached_rt(&res, &fl6->daddr, &fl6->saddr); in ip6_pol_route()
2232 } else if (unlikely((fl6->flowi6_flags & FLOWI_FLAG_KNOWN_NH) && in ip6_pol_route()
2239 rt = ip6_rt_cache_alloc(&res, &fl6->daddr, NULL); in ip6_pol_route()
2276 struct flowi6 *fl6, in ip6_pol_route_input() argument
2280 return ip6_pol_route(net, table, fl6->flowi6_iif, fl6, skb, flags); in ip6_pol_route_input()
2285 struct flowi6 *fl6, in ip6_route_input_lookup() argument
2289 if (rt6_need_strict(&fl6->daddr) && dev->type != ARPHRD_PIMREG) in ip6_route_input_lookup()
2292 return fib6_rule_lookup(net, fl6, skb, flags, ip6_pol_route_input); in ip6_route_input_lookup()
2342 u32 rt6_multipath_hash(const struct net *net, const struct flowi6 *fl6, in rt6_multipath_hash() argument
2355 hash_keys.addrs.v6addrs.src = fl6->saddr; in rt6_multipath_hash()
2356 hash_keys.addrs.v6addrs.dst = fl6->daddr; in rt6_multipath_hash()
2357 hash_keys.tags.flow_label = (__force u32)flowi6_get_flowlabel(fl6); in rt6_multipath_hash()
2358 hash_keys.basic.ip_proto = fl6->flowi6_proto; in rt6_multipath_hash()
2385 hash_keys.addrs.v6addrs.src = fl6->saddr; in rt6_multipath_hash()
2386 hash_keys.addrs.v6addrs.dst = fl6->daddr; in rt6_multipath_hash()
2387 hash_keys.ports.src = fl6->fl6_sport; in rt6_multipath_hash()
2388 hash_keys.ports.dst = fl6->fl6_dport; in rt6_multipath_hash()
2389 hash_keys.basic.ip_proto = fl6->flowi6_proto; in rt6_multipath_hash()
2422 hash_keys.addrs.v6addrs.src = fl6->saddr; in rt6_multipath_hash()
2423 hash_keys.addrs.v6addrs.dst = fl6->daddr; in rt6_multipath_hash()
2424 hash_keys.tags.flow_label = (__force u32)flowi6_get_flowlabel(fl6); in rt6_multipath_hash()
2425 hash_keys.basic.ip_proto = fl6->flowi6_proto; in rt6_multipath_hash()
2441 struct flowi6 fl6 = { in ip6_route_input() local
2453 fl6.flowi6_tun_key.tun_id = tun_info->key.tun_id; in ip6_route_input()
2455 if (fib6_rules_early_flow_dissect(net, skb, &fl6, &_flkeys)) in ip6_route_input()
2458 if (unlikely(fl6.flowi6_proto == IPPROTO_ICMPV6)) in ip6_route_input()
2459 fl6.mp_hash = rt6_multipath_hash(net, &fl6, skb, flkeys); in ip6_route_input()
2462 &fl6, skb, flags)); in ip6_route_input()
2467 struct flowi6 *fl6, in ip6_pol_route_output() argument
2471 return ip6_pol_route(net, table, fl6->flowi6_oif, fl6, skb, flags); in ip6_pol_route_output()
2476 struct flowi6 *fl6, int flags) in ip6_route_output_flags_noref() argument
2480 if (ipv6_addr_type(&fl6->daddr) & in ip6_route_output_flags_noref()
2485 dst = l3mdev_link_scope_lookup(net, fl6); in ip6_route_output_flags_noref()
2490 fl6->flowi6_iif = LOOPBACK_IFINDEX; in ip6_route_output_flags_noref()
2493 any_src = ipv6_addr_any(&fl6->saddr); in ip6_route_output_flags_noref()
2494 if ((sk && sk->sk_bound_dev_if) || rt6_need_strict(&fl6->daddr) || in ip6_route_output_flags_noref()
2495 (fl6->flowi6_oif && any_src)) in ip6_route_output_flags_noref()
2503 return fib6_rule_lookup(net, fl6, NULL, flags, ip6_pol_route_output); in ip6_route_output_flags_noref()
2509 struct flowi6 *fl6, in ip6_route_output_flags() argument
2516 dst = ip6_route_output_flags_noref(net, sk, fl6, flags); in ip6_route_output_flags()
2807 struct flowi6 fl6 = { in ip6_update_pmtu() local
2816 dst = ip6_route_output(net, NULL, &fl6); in ip6_update_pmtu()
2846 const struct flowi6 *fl6) in ip6_sk_dst_store_flow() argument
2853 ipv6_addr_equal(&fl6->daddr, &sk->sk_v6_daddr) ? in ip6_sk_dst_store_flow()
2856 ipv6_addr_equal(&fl6->saddr, &np->saddr) ? in ip6_sk_dst_store_flow()
2863 struct flowi6 *fl6, in ip6_redirect_nh_match() argument
2870 fl6->flowi6_oif != nh->fib_nh_dev->ifindex) in ip6_redirect_nh_match()
2881 rt_cache = rt6_find_cached_rt(res, &fl6->daddr, &fl6->saddr); in ip6_redirect_nh_match()
2894 struct flowi6 *fl6; member
2904 return ip6_redirect_nh_match(arg->res, arg->fl6, arg->gw, arg->ret); in fib6_nh_redirect_match()
2909 struct flowi6 fl6; member
2915 struct flowi6 *fl6, in __ip6_route_redirect() argument
2919 struct ip6rd_flowi *rdfl = (struct ip6rd_flowi *)fl6; in __ip6_route_redirect()
2924 .fl6 = fl6, in __ip6_route_redirect()
2934 if (fl6->flowi6_flags & FLOWI_FLAG_SKIP_NH_OIF) in __ip6_route_redirect()
2935 fl6->flowi6_oif = skb->dev->ifindex; in __ip6_route_redirect()
2948 fn = fib6_node_lookup(&table->tb6_root, &fl6->daddr, &fl6->saddr); in __ip6_route_redirect()
2966 if (ip6_redirect_nh_match(&res, fl6, &rdfl->gateway, in __ip6_route_redirect()
2980 fn = fib6_backtrack(fn, &fl6->saddr); in __ip6_route_redirect()
2998 trace_fib6_table_lookup(net, &res, table, fl6); in __ip6_route_redirect()
3003 const struct flowi6 *fl6, in ip6_route_redirect() argument
3010 rdfl.fl6 = *fl6; in ip6_route_redirect()
3013 return fib6_rule_lookup(net, &rdfl.fl6, skb, in ip6_route_redirect()
3022 struct flowi6 fl6 = { in ip6_redirect() local
3032 dst = ip6_route_redirect(net, &fl6, skb, &ipv6_hdr(skb)->saddr); in ip6_redirect()
3043 struct flowi6 fl6 = { in ip6_redirect_no_header() local
3051 dst = ip6_route_redirect(net, &fl6, skb, &iph->saddr); in ip6_redirect_no_header()
3150 struct flowi6 *fl6) in icmp6_dst_alloc() argument
3169 rt->rt6i_gateway = fl6->daddr; in icmp6_dst_alloc()
3170 rt->rt6i_dst.addr = fl6->daddr; in icmp6_dst_alloc()
3181 dst = xfrm_lookup(net, &rt->dst, flowi6_to_flowi(fl6), NULL, 0); in icmp6_dst_alloc()
3219 struct flowi6 fl6 = { in ip6_nh_lookup_table() local
3236 err = fib6_table_lookup(net, table, cfg->fc_ifindex, &fl6, res, flags); in ip6_nh_lookup_table()
3238 fib6_select_path(net, res, &fl6, cfg->fc_ifindex, in ip6_nh_lookup_table()
3291 struct flowi6 fl6 = { in ip6_route_check_nh() local
3296 err = fib6_lookup(net, cfg->fc_ifindex, &fl6, &res, flags); in ip6_route_check_nh()
3304 fib6_select_path(net, &res, &fl6, cfg->fc_ifindex, in ip6_route_check_nh()
5883 struct flowi6 fl6 = {}; in inet6_rtm_getroute() local
5892 fl6.flowlabel = ip6_make_flowinfo(rtm->rtm_tos, 0); in inet6_rtm_getroute()
5899 fl6.saddr = *(struct in6_addr *)nla_data(tb[RTA_SRC]); in inet6_rtm_getroute()
5906 fl6.daddr = *(struct in6_addr *)nla_data(tb[RTA_DST]); in inet6_rtm_getroute()
5916 fl6.flowi6_mark = nla_get_u32(tb[RTA_MARK]); in inet6_rtm_getroute()
5919 fl6.flowi6_uid = make_kuid(current_user_ns(), in inet6_rtm_getroute()
5922 fl6.flowi6_uid = iif ? INVALID_UID : current_uid(); in inet6_rtm_getroute()
5925 fl6.fl6_sport = nla_get_be16(tb[RTA_SPORT]); in inet6_rtm_getroute()
5928 fl6.fl6_dport = nla_get_be16(tb[RTA_DPORT]); in inet6_rtm_getroute()
5932 &fl6.flowi6_proto, AF_INET6, in inet6_rtm_getroute()
5951 fl6.flowi6_iif = iif; in inet6_rtm_getroute()
5953 if (!ipv6_addr_any(&fl6.saddr)) in inet6_rtm_getroute()
5956 dst = ip6_route_input_lookup(net, dev, &fl6, NULL, flags); in inet6_rtm_getroute()
5960 fl6.flowi6_oif = oif; in inet6_rtm_getroute()
5962 dst = ip6_route_output(net, NULL, &fl6); in inet6_rtm_getroute()
5997 err = rt6_fill_node(net, skb, from, dst, &fl6.daddr, in inet6_rtm_getroute()
5998 &fl6.saddr, iif, RTM_NEWROUTE, in inet6_rtm_getroute()