Lines Matching refs:fl6

416 		      struct flowi6 *fl6, int oif, bool have_oif_match,  in fib6_select_path()  argument
431 if (!fl6->mp_hash && in fib6_select_path()
433 fl6->mp_hash = rt6_multipath_hash(net, fl6, skb, NULL); in fib6_select_path()
436 nexthop_path_fib6_result(res, fl6->mp_hash); in fib6_select_path()
440 if (fl6->mp_hash <= atomic_read(&match->fib6_nh->fib_nh_upper_bound)) in fib6_select_path()
449 if (fl6->mp_hash > nh_upper_bound) in fib6_select_path()
1204 struct flowi6 *fl6, in ip6_pol_route_lookup() argument
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()
2184 fn = fib6_backtrack(fn, &fl6->saddr); in fib6_table_lookup()
2195 trace_fib6_table_lookup(net, res, table, fl6); in fib6_table_lookup()
2201 int oif, struct flowi6 *fl6, in ip6_pol_route() argument
2218 fib6_table_lookup(net, table, oif, fl6, &res, strict); in ip6_pol_route()
2222 fib6_select_path(net, &res, fl6, oif, false, skb, strict); in ip6_pol_route()
2225 rt = rt6_find_cached_rt(&res, &fl6->daddr, &fl6->saddr); in ip6_pol_route()
2228 } else if (unlikely((fl6->flowi6_flags & FLOWI_FLAG_KNOWN_NH) && in ip6_pol_route()
2235 rt = ip6_rt_cache_alloc(&res, &fl6->daddr, NULL); in ip6_pol_route()
2271 struct flowi6 *fl6, in ip6_pol_route_input() argument
2275 return ip6_pol_route(net, table, fl6->flowi6_iif, fl6, skb, flags); in ip6_pol_route_input()
2280 struct flowi6 *fl6, in ip6_route_input_lookup() argument
2284 if (rt6_need_strict(&fl6->daddr) && dev->type != ARPHRD_PIMREG) in ip6_route_input_lookup()
2287 return fib6_rule_lookup(net, fl6, skb, flags, ip6_pol_route_input); in ip6_route_input_lookup()
2429 const struct flowi6 *fl6) in rt6_multipath_custom_hash_fl6() argument
2440 hash_keys.addrs.v6addrs.src = fl6->saddr; in rt6_multipath_custom_hash_fl6()
2442 hash_keys.addrs.v6addrs.dst = fl6->daddr; in rt6_multipath_custom_hash_fl6()
2444 hash_keys.basic.ip_proto = fl6->flowi6_proto; in rt6_multipath_custom_hash_fl6()
2446 hash_keys.tags.flow_label = (__force u32)flowi6_get_flowlabel(fl6); in rt6_multipath_custom_hash_fl6()
2448 hash_keys.ports.src = fl6->fl6_sport; in rt6_multipath_custom_hash_fl6()
2450 hash_keys.ports.dst = fl6->fl6_dport; in rt6_multipath_custom_hash_fl6()
2456 u32 rt6_multipath_hash(const struct net *net, const struct flowi6 *fl6, in rt6_multipath_hash() argument
2469 hash_keys.addrs.v6addrs.src = fl6->saddr; in rt6_multipath_hash()
2470 hash_keys.addrs.v6addrs.dst = fl6->daddr; in rt6_multipath_hash()
2471 hash_keys.tags.flow_label = (__force u32)flowi6_get_flowlabel(fl6); in rt6_multipath_hash()
2472 hash_keys.basic.ip_proto = fl6->flowi6_proto; in rt6_multipath_hash()
2500 hash_keys.addrs.v6addrs.src = fl6->saddr; in rt6_multipath_hash()
2501 hash_keys.addrs.v6addrs.dst = fl6->daddr; in rt6_multipath_hash()
2502 hash_keys.ports.src = fl6->fl6_sport; in rt6_multipath_hash()
2503 hash_keys.ports.dst = fl6->fl6_dport; in rt6_multipath_hash()
2504 hash_keys.basic.ip_proto = fl6->flowi6_proto; in rt6_multipath_hash()
2538 hash_keys.addrs.v6addrs.src = fl6->saddr; in rt6_multipath_hash()
2539 hash_keys.addrs.v6addrs.dst = fl6->daddr; in rt6_multipath_hash()
2540 hash_keys.tags.flow_label = (__force u32)flowi6_get_flowlabel(fl6); in rt6_multipath_hash()
2541 hash_keys.basic.ip_proto = fl6->flowi6_proto; in rt6_multipath_hash()
2549 mhash = rt6_multipath_custom_hash_fl6(net, fl6); in rt6_multipath_hash()
2563 struct flowi6 fl6 = { in ip6_route_input() local
2575 fl6.flowi6_tun_key.tun_id = tun_info->key.tun_id; in ip6_route_input()
2577 if (fib6_rules_early_flow_dissect(net, skb, &fl6, &_flkeys)) in ip6_route_input()
2580 if (unlikely(fl6.flowi6_proto == IPPROTO_ICMPV6)) in ip6_route_input()
2581 fl6.mp_hash = rt6_multipath_hash(net, &fl6, skb, flkeys); in ip6_route_input()
2584 &fl6, skb, flags)); in ip6_route_input()
2589 struct flowi6 *fl6, in ip6_pol_route_output() argument
2593 return ip6_pol_route(net, table, fl6->flowi6_oif, fl6, skb, flags); in ip6_pol_route_output()
2598 struct flowi6 *fl6, in ip6_route_output_flags_noref() argument
2603 if (ipv6_addr_type(&fl6->daddr) & in ip6_route_output_flags_noref()
2608 dst = l3mdev_link_scope_lookup(net, fl6); in ip6_route_output_flags_noref()
2613 fl6->flowi6_iif = LOOPBACK_IFINDEX; in ip6_route_output_flags_noref()
2616 any_src = ipv6_addr_any(&fl6->saddr); in ip6_route_output_flags_noref()
2617 if ((sk && sk->sk_bound_dev_if) || rt6_need_strict(&fl6->daddr) || in ip6_route_output_flags_noref()
2618 (fl6->flowi6_oif && any_src)) in ip6_route_output_flags_noref()
2626 return fib6_rule_lookup(net, fl6, NULL, flags, ip6_pol_route_output); in ip6_route_output_flags_noref()
2631 struct flowi6 *fl6, in ip6_route_output_flags() argument
2638 dst = ip6_route_output_flags_noref(net, sk, fl6, flags); in ip6_route_output_flags()
2931 struct flowi6 fl6 = { in ip6_update_pmtu() local
2940 dst = ip6_route_output(net, NULL, &fl6); in ip6_update_pmtu()
2970 const struct flowi6 *fl6) in ip6_sk_dst_store_flow() argument
2977 ipv6_addr_equal(&fl6->daddr, &sk->sk_v6_daddr) ? in ip6_sk_dst_store_flow()
2980 ipv6_addr_equal(&fl6->saddr, &np->saddr) ? in ip6_sk_dst_store_flow()
2987 struct flowi6 *fl6, in ip6_redirect_nh_match() argument
2994 fl6->flowi6_oif != nh->fib_nh_dev->ifindex) in ip6_redirect_nh_match()
3005 rt_cache = rt6_find_cached_rt(res, &fl6->daddr, &fl6->saddr); in ip6_redirect_nh_match()
3018 struct flowi6 *fl6; member
3028 return ip6_redirect_nh_match(arg->res, arg->fl6, arg->gw, arg->ret); in fib6_nh_redirect_match()
3033 struct flowi6 fl6; member
3039 struct flowi6 *fl6, in __ip6_route_redirect() argument
3043 struct ip6rd_flowi *rdfl = (struct ip6rd_flowi *)fl6; in __ip6_route_redirect()
3048 .fl6 = fl6, in __ip6_route_redirect()
3066 fn = fib6_node_lookup(&table->tb6_root, &fl6->daddr, &fl6->saddr); in __ip6_route_redirect()
3084 if (ip6_redirect_nh_match(&res, fl6, &rdfl->gateway, in __ip6_route_redirect()
3098 fn = fib6_backtrack(fn, &fl6->saddr); in __ip6_route_redirect()
3116 trace_fib6_table_lookup(net, &res, table, fl6); in __ip6_route_redirect()
3121 const struct flowi6 *fl6, in ip6_route_redirect() argument
3128 rdfl.fl6 = *fl6; in ip6_route_redirect()
3131 return fib6_rule_lookup(net, &rdfl.fl6, skb, in ip6_route_redirect()
3140 struct flowi6 fl6 = { in ip6_redirect() local
3150 dst = ip6_route_redirect(net, &fl6, skb, &ipv6_hdr(skb)->saddr); in ip6_redirect()
3161 struct flowi6 fl6 = { in ip6_redirect_no_header() local
3169 dst = ip6_route_redirect(net, &fl6, skb, &iph->saddr); in ip6_redirect_no_header()
3251 struct flowi6 *fl6) in icmp6_dst_alloc() argument
3270 rt->rt6i_gateway = fl6->daddr; in icmp6_dst_alloc()
3271 rt->rt6i_dst.addr = fl6->daddr; in icmp6_dst_alloc()
3281 dst = xfrm_lookup(net, &rt->dst, flowi6_to_flowi(fl6), NULL, 0); in icmp6_dst_alloc()
3313 struct flowi6 fl6 = { in ip6_nh_lookup_table() local
3330 err = fib6_table_lookup(net, table, cfg->fc_ifindex, &fl6, res, flags); in ip6_nh_lookup_table()
3332 fib6_select_path(net, res, &fl6, cfg->fc_ifindex, in ip6_nh_lookup_table()
3385 struct flowi6 fl6 = { in ip6_route_check_nh() local
3390 err = fib6_lookup(net, cfg->fc_ifindex, &fl6, &res, flags); in ip6_route_check_nh()
3398 fib6_select_path(net, &res, &fl6, cfg->fc_ifindex, in ip6_route_check_nh()
6022 struct flowi6 fl6 = {}; in inet6_rtm_getroute() local
6031 fl6.flowlabel = ip6_make_flowinfo(rtm->rtm_tos, 0); in inet6_rtm_getroute()
6038 fl6.saddr = *(struct in6_addr *)nla_data(tb[RTA_SRC]); in inet6_rtm_getroute()
6045 fl6.daddr = *(struct in6_addr *)nla_data(tb[RTA_DST]); in inet6_rtm_getroute()
6055 fl6.flowi6_mark = nla_get_u32(tb[RTA_MARK]); in inet6_rtm_getroute()
6058 fl6.flowi6_uid = make_kuid(current_user_ns(), in inet6_rtm_getroute()
6061 fl6.flowi6_uid = iif ? INVALID_UID : current_uid(); in inet6_rtm_getroute()
6064 fl6.fl6_sport = nla_get_be16(tb[RTA_SPORT]); in inet6_rtm_getroute()
6067 fl6.fl6_dport = nla_get_be16(tb[RTA_DPORT]); in inet6_rtm_getroute()
6071 &fl6.flowi6_proto, AF_INET6, in inet6_rtm_getroute()
6090 fl6.flowi6_iif = iif; in inet6_rtm_getroute()
6092 if (!ipv6_addr_any(&fl6.saddr)) in inet6_rtm_getroute()
6095 dst = ip6_route_input_lookup(net, dev, &fl6, NULL, flags); in inet6_rtm_getroute()
6099 fl6.flowi6_oif = oif; in inet6_rtm_getroute()
6101 dst = ip6_route_output(net, NULL, &fl6); in inet6_rtm_getroute()
6136 err = rt6_fill_node(net, skb, from, dst, &fl6.daddr, in inet6_rtm_getroute()
6137 &fl6.saddr, iif, RTM_NEWROUTE, in inet6_rtm_getroute()