Lines Matching refs:fl6
415 struct flowi6 *fl6, int oif, bool have_oif_match, in fib6_select_path() argument
433 if (!fl6->mp_hash && in fib6_select_path()
435 fl6->mp_hash = rt6_multipath_hash(net, fl6, skb, NULL); in fib6_select_path()
438 nexthop_path_fib6_result(res, fl6->mp_hash); in fib6_select_path()
442 if (fl6->mp_hash <= atomic_read(&match->fib6_nh->fib_nh_upper_bound)) in fib6_select_path()
451 if (fl6->mp_hash > nh_upper_bound) in fib6_select_path()
1208 struct flowi6 *fl6, in ip6_pol_route_lookup() argument
1217 fn = fib6_node_lookup(&table->tb6_root, &fl6->daddr, &fl6->saddr); in ip6_pol_route_lookup()
1223 rt6_device_match(net, &res, &fl6->saddr, fl6->flowi6_oif, in ip6_pol_route_lookup()
1227 fn = fib6_backtrack(fn, &fl6->saddr); in ip6_pol_route_lookup()
1238 fib6_select_path(net, &res, fl6, fl6->flowi6_oif, in ip6_pol_route_lookup()
1239 fl6->flowi6_oif != 0, skb, flags); in ip6_pol_route_lookup()
1242 rt = rt6_find_cached_rt(&res, &fl6->daddr, &fl6->saddr); in ip6_pol_route_lookup()
1252 trace_fib6_table_lookup(net, &res, table, fl6); in ip6_pol_route_lookup()
1259 struct dst_entry *ip6_route_lookup(struct net *net, struct flowi6 *fl6, in ip6_route_lookup() argument
1262 return fib6_rule_lookup(net, fl6, skb, flags, ip6_pol_route_lookup); in ip6_route_lookup()
1270 struct flowi6 fl6 = { in rt6_lookup() local
1278 memcpy(&fl6.saddr, saddr, sizeof(*saddr)); in rt6_lookup()
1282 dst = fib6_rule_lookup(net, &fl6, skb, flags, ip6_pol_route_lookup); in rt6_lookup()
2179 struct flowi6 *fl6, struct fib6_result *res, int strict) in fib6_table_lookup() argument
2183 fn = fib6_node_lookup(&table->tb6_root, &fl6->daddr, &fl6->saddr); in fib6_table_lookup()
2189 fn = fib6_backtrack(fn, &fl6->saddr); in fib6_table_lookup()
2200 trace_fib6_table_lookup(net, res, table, fl6); in fib6_table_lookup()
2206 int oif, struct flowi6 *fl6, in ip6_pol_route() argument
2223 fib6_table_lookup(net, table, oif, fl6, &res, strict); in ip6_pol_route()
2227 fib6_select_path(net, &res, fl6, oif, false, skb, strict); in ip6_pol_route()
2230 rt = rt6_find_cached_rt(&res, &fl6->daddr, &fl6->saddr); in ip6_pol_route()
2233 } else if (unlikely((fl6->flowi6_flags & FLOWI_FLAG_KNOWN_NH) && in ip6_pol_route()
2240 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()
2434 const struct flowi6 *fl6) in rt6_multipath_custom_hash_fl6() argument
2445 hash_keys.addrs.v6addrs.src = fl6->saddr; in rt6_multipath_custom_hash_fl6()
2447 hash_keys.addrs.v6addrs.dst = fl6->daddr; in rt6_multipath_custom_hash_fl6()
2449 hash_keys.basic.ip_proto = fl6->flowi6_proto; in rt6_multipath_custom_hash_fl6()
2451 hash_keys.tags.flow_label = (__force u32)flowi6_get_flowlabel(fl6); in rt6_multipath_custom_hash_fl6()
2453 hash_keys.ports.src = fl6->fl6_sport; in rt6_multipath_custom_hash_fl6()
2455 hash_keys.ports.dst = fl6->fl6_dport; in rt6_multipath_custom_hash_fl6()
2461 u32 rt6_multipath_hash(const struct net *net, const struct flowi6 *fl6, in rt6_multipath_hash() argument
2474 hash_keys.addrs.v6addrs.src = fl6->saddr; in rt6_multipath_hash()
2475 hash_keys.addrs.v6addrs.dst = fl6->daddr; in rt6_multipath_hash()
2476 hash_keys.tags.flow_label = (__force u32)flowi6_get_flowlabel(fl6); in rt6_multipath_hash()
2477 hash_keys.basic.ip_proto = fl6->flowi6_proto; in rt6_multipath_hash()
2505 hash_keys.addrs.v6addrs.src = fl6->saddr; in rt6_multipath_hash()
2506 hash_keys.addrs.v6addrs.dst = fl6->daddr; in rt6_multipath_hash()
2507 hash_keys.ports.src = fl6->fl6_sport; in rt6_multipath_hash()
2508 hash_keys.ports.dst = fl6->fl6_dport; in rt6_multipath_hash()
2509 hash_keys.basic.ip_proto = fl6->flowi6_proto; in rt6_multipath_hash()
2543 hash_keys.addrs.v6addrs.src = fl6->saddr; in rt6_multipath_hash()
2544 hash_keys.addrs.v6addrs.dst = fl6->daddr; in rt6_multipath_hash()
2545 hash_keys.tags.flow_label = (__force u32)flowi6_get_flowlabel(fl6); in rt6_multipath_hash()
2546 hash_keys.basic.ip_proto = fl6->flowi6_proto; in rt6_multipath_hash()
2554 mhash = rt6_multipath_custom_hash_fl6(net, fl6); in rt6_multipath_hash()
2568 struct flowi6 fl6 = { in ip6_route_input() local
2580 fl6.flowi6_tun_key.tun_id = tun_info->key.tun_id; in ip6_route_input()
2582 if (fib6_rules_early_flow_dissect(net, skb, &fl6, &_flkeys)) in ip6_route_input()
2585 if (unlikely(fl6.flowi6_proto == IPPROTO_ICMPV6)) in ip6_route_input()
2586 fl6.mp_hash = rt6_multipath_hash(net, &fl6, skb, flkeys); in ip6_route_input()
2589 &fl6, skb, flags)); in ip6_route_input()
2594 struct flowi6 *fl6, in ip6_pol_route_output() argument
2598 return ip6_pol_route(net, table, fl6->flowi6_oif, fl6, skb, flags); in ip6_pol_route_output()
2603 struct flowi6 *fl6, in ip6_route_output_flags_noref() argument
2608 if (ipv6_addr_type(&fl6->daddr) & in ip6_route_output_flags_noref()
2613 dst = l3mdev_link_scope_lookup(net, fl6); in ip6_route_output_flags_noref()
2618 fl6->flowi6_iif = LOOPBACK_IFINDEX; in ip6_route_output_flags_noref()
2621 any_src = ipv6_addr_any(&fl6->saddr); in ip6_route_output_flags_noref()
2622 if ((sk && sk->sk_bound_dev_if) || rt6_need_strict(&fl6->daddr) || in ip6_route_output_flags_noref()
2623 (fl6->flowi6_oif && any_src)) in ip6_route_output_flags_noref()
2631 return fib6_rule_lookup(net, fl6, NULL, flags, ip6_pol_route_output); in ip6_route_output_flags_noref()
2636 struct flowi6 *fl6, in ip6_route_output_flags() argument
2643 dst = ip6_route_output_flags_noref(net, sk, fl6, flags); in ip6_route_output_flags()
2936 struct flowi6 fl6 = { in ip6_update_pmtu() local
2945 dst = ip6_route_output(net, NULL, &fl6); in ip6_update_pmtu()
2976 const struct flowi6 *fl6) in ip6_sk_dst_store_flow() argument
2983 ipv6_addr_equal(&fl6->daddr, &sk->sk_v6_daddr) ? in ip6_sk_dst_store_flow()
2986 ipv6_addr_equal(&fl6->saddr, &np->saddr) ? in ip6_sk_dst_store_flow()
2993 struct flowi6 *fl6, in ip6_redirect_nh_match() argument
3000 fl6->flowi6_oif != nh->fib_nh_dev->ifindex) in ip6_redirect_nh_match()
3011 rt_cache = rt6_find_cached_rt(res, &fl6->daddr, &fl6->saddr); in ip6_redirect_nh_match()
3024 struct flowi6 *fl6; member
3034 return ip6_redirect_nh_match(arg->res, arg->fl6, arg->gw, arg->ret); in fib6_nh_redirect_match()
3039 struct flowi6 fl6; member
3045 struct flowi6 *fl6, in __ip6_route_redirect() argument
3049 struct ip6rd_flowi *rdfl = (struct ip6rd_flowi *)fl6; in __ip6_route_redirect()
3054 .fl6 = fl6, in __ip6_route_redirect()
3072 fn = fib6_node_lookup(&table->tb6_root, &fl6->daddr, &fl6->saddr); in __ip6_route_redirect()
3090 if (ip6_redirect_nh_match(&res, fl6, &rdfl->gateway, in __ip6_route_redirect()
3104 fn = fib6_backtrack(fn, &fl6->saddr); in __ip6_route_redirect()
3122 trace_fib6_table_lookup(net, &res, table, fl6); in __ip6_route_redirect()
3127 const struct flowi6 *fl6, in ip6_route_redirect() argument
3134 rdfl.fl6 = *fl6; in ip6_route_redirect()
3137 return fib6_rule_lookup(net, &rdfl.fl6, skb, in ip6_route_redirect()
3146 struct flowi6 fl6 = { in ip6_redirect() local
3156 dst = ip6_route_redirect(net, &fl6, skb, &ipv6_hdr(skb)->saddr); in ip6_redirect()
3167 struct flowi6 fl6 = { in ip6_redirect_no_header() local
3175 dst = ip6_route_redirect(net, &fl6, skb, &iph->saddr); in ip6_redirect_no_header()
3257 struct flowi6 *fl6) in icmp6_dst_alloc() argument
3276 rt->rt6i_gateway = fl6->daddr; in icmp6_dst_alloc()
3277 rt->rt6i_dst.addr = fl6->daddr; in icmp6_dst_alloc()
3287 dst = xfrm_lookup(net, &rt->dst, flowi6_to_flowi(fl6), NULL, 0); in icmp6_dst_alloc()
3319 struct flowi6 fl6 = { in ip6_nh_lookup_table() local
3336 err = fib6_table_lookup(net, table, cfg->fc_ifindex, &fl6, res, flags); in ip6_nh_lookup_table()
3338 fib6_select_path(net, res, &fl6, cfg->fc_ifindex, in ip6_nh_lookup_table()
3392 struct flowi6 fl6 = { in ip6_route_check_nh() local
3397 err = fib6_lookup(net, cfg->fc_ifindex, &fl6, &res, flags); in ip6_route_check_nh()
3405 fib6_select_path(net, &res, &fl6, cfg->fc_ifindex, in ip6_route_check_nh()
6027 struct flowi6 fl6 = {}; in inet6_rtm_getroute() local
6036 fl6.flowlabel = ip6_make_flowinfo(rtm->rtm_tos, 0); in inet6_rtm_getroute()
6043 fl6.saddr = *(struct in6_addr *)nla_data(tb[RTA_SRC]); in inet6_rtm_getroute()
6050 fl6.daddr = *(struct in6_addr *)nla_data(tb[RTA_DST]); in inet6_rtm_getroute()
6060 fl6.flowi6_mark = nla_get_u32(tb[RTA_MARK]); in inet6_rtm_getroute()
6063 fl6.flowi6_uid = make_kuid(current_user_ns(), in inet6_rtm_getroute()
6066 fl6.flowi6_uid = iif ? INVALID_UID : current_uid(); in inet6_rtm_getroute()
6069 fl6.fl6_sport = nla_get_be16(tb[RTA_SPORT]); in inet6_rtm_getroute()
6072 fl6.fl6_dport = nla_get_be16(tb[RTA_DPORT]); in inet6_rtm_getroute()
6076 &fl6.flowi6_proto, AF_INET6, in inet6_rtm_getroute()
6095 fl6.flowi6_iif = iif; in inet6_rtm_getroute()
6097 if (!ipv6_addr_any(&fl6.saddr)) in inet6_rtm_getroute()
6100 dst = ip6_route_input_lookup(net, dev, &fl6, NULL, flags); in inet6_rtm_getroute()
6104 fl6.flowi6_oif = oif; in inet6_rtm_getroute()
6106 dst = ip6_route_output(net, NULL, &fl6); in inet6_rtm_getroute()
6141 err = rt6_fill_node(net, skb, from, dst, &fl6.daddr, in inet6_rtm_getroute()
6142 &fl6.saddr, iif, RTM_NEWROUTE, in inet6_rtm_getroute()